Commit 90dc57b62056214ad695b15af60523dfa2eaad0c
Committed by
David Gräff
1 parent
0fb7e43d
Use enum for scope.horizontal.samplerateSource. Remove softwaretriggersettings, …
…use dsotriggersettings. Move more comments from cpp to header
Showing
12 changed files
with
85 additions
and
94 deletions
openhantek/src/docks/HorizontalDock.cpp
| ... | ... | @@ -181,7 +181,7 @@ void HorizontalDock::frequencybaseSelected(double frequencybase) { |
| 181 | 181 | /// \param samplerate The samplerate in samples/second. |
| 182 | 182 | void HorizontalDock::samplerateSelected(double samplerate) { |
| 183 | 183 | scope->horizontal.samplerate = samplerate; |
| 184 | - scope->horizontal.samplerateSet = true; | |
| 184 | + scope->horizontal.samplerateSource = DsoSettingsScopeHorizontal::Samplerrate; | |
| 185 | 185 | emit samplerateChanged(samplerate); |
| 186 | 186 | } |
| 187 | 187 | |
| ... | ... | @@ -189,7 +189,7 @@ void HorizontalDock::samplerateSelected(double samplerate) { |
| 189 | 189 | /// \param timebase The timebase in seconds. |
| 190 | 190 | void HorizontalDock::timebaseSelected(double timebase) { |
| 191 | 191 | scope->horizontal.timebase = timebase; |
| 192 | - scope->horizontal.samplerateSet = false; | |
| 192 | + scope->horizontal.samplerateSource = DsoSettingsScopeHorizontal::Duration; | |
| 193 | 193 | emit timebaseChanged(timebase); |
| 194 | 194 | } |
| 195 | 195 | ... | ... |
openhantek/src/dsowidget.cpp
| ... | ... | @@ -78,7 +78,6 @@ DsoWidget::DsoWidget(DsoSettingsScope *scope, DsoSettingsView *view, const Dso:: |
| 78 | 78 | markerSlider->setStep(marker, 0.2); |
| 79 | 79 | markerSlider->setValue(marker, scope->horizontal.marker[marker]); |
| 80 | 80 | markerSlider->setIndexVisible(marker, true); |
| 81 | - scope->horizontal.marker_visible[marker] = true; | |
| 82 | 81 | } |
| 83 | 82 | |
| 84 | 83 | // The table for the settings | ... | ... |
openhantek/src/hantekdso/controlsettings.h
| ... | ... | @@ -2,7 +2,6 @@ |
| 2 | 2 | |
| 3 | 3 | #include "controlspecification.h" |
| 4 | 4 | #include "enums.h" |
| 5 | -#include "softwaretriggersettings.h" | |
| 6 | 5 | |
| 7 | 6 | namespace Dso { |
| 8 | 7 | |
| ... | ... | @@ -31,13 +30,13 @@ struct ControlSettingsSamplerate { |
| 31 | 30 | /// \struct ControlSettingsTrigger hantek/control.h |
| 32 | 31 | /// \brief Stores the current trigger settings of the device. |
| 33 | 32 | struct ControlSettingsTrigger { |
| 34 | - std::vector<double> level; ///< The trigger level for each channel in V | |
| 35 | - double position = 0.0; ///< The current pretrigger position | |
| 36 | - unsigned int point = 0; ///< The trigger position in Hantek coding | |
| 33 | + std::vector<double> level; ///< The trigger level for each channel in V | |
| 34 | + double position = 0.0; ///< The current pretrigger position | |
| 35 | + unsigned int point = 0; ///< The trigger position in Hantek coding | |
| 37 | 36 | Dso::TriggerMode mode = Dso::TriggerMode::NORMAL; ///< The trigger mode |
| 38 | 37 | Dso::Slope slope = Dso::Slope::Positive; ///< The trigger slope |
| 39 | - bool special = false; ///< true, if the trigger source is special | |
| 40 | - unsigned int source = 0; ///< The trigger source | |
| 38 | + bool special = false; ///< true, if the trigger source is special | |
| 39 | + unsigned int source = 0; ///< The trigger source | |
| 41 | 40 | }; |
| 42 | 41 | |
| 43 | 42 | ////////////////////////////////////////////////////////////////////////////// |
| ... | ... | @@ -60,6 +59,6 @@ struct ControlSettings { |
| 60 | 59 | ControlSettingsTrigger trigger; ///< The trigger settings |
| 61 | 60 | RecordLengthID recordLengthId = 1; ///< The id in the record length array |
| 62 | 61 | unsigned usedChannels = 0; ///< Number of activated channels |
| 63 | - SoftwareTriggerSettings swTrigger; | |
| 62 | + unsigned swSampleMargin = 2000; ///< Software trigger, sample margin | |
| 64 | 63 | }; |
| 65 | 64 | } | ... | ... |
openhantek/src/hantekdso/hantekdsocontrol.cpp
| ... | ... | @@ -603,9 +603,6 @@ void HantekDsoControl::updateSamplerateLimits() { |
| 603 | 603 | limits->max / specification.bufferDividers[controlsettings.recordLengthId]); |
| 604 | 604 | } |
| 605 | 605 | |
| 606 | -/// \brief Sets the size of the oscilloscopes sample buffer. | |
| 607 | -/// \param index The record length index that should be set. | |
| 608 | -/// \return The record length that has been set, 0 on error. | |
| 609 | 606 | Dso::ErrorCode HantekDsoControl::setRecordLength(unsigned index) { |
| 610 | 607 | if (!device->isConnected()) return Dso::ErrorCode::CONNECTION; |
| 611 | 608 | |
| ... | ... | @@ -618,10 +615,6 @@ Dso::ErrorCode HantekDsoControl::setRecordLength(unsigned index) { |
| 618 | 615 | return Dso::ErrorCode::NONE; |
| 619 | 616 | } |
| 620 | 617 | |
| 621 | -/// \brief Sets the samplerate of the oscilloscope. | |
| 622 | -/// \param samplerate The samplerate that should be met (S/s), 0.0 to restore | |
| 623 | -/// current samplerate. | |
| 624 | -/// \return The samplerate that has been set, 0.0 on error. | |
| 625 | 618 | Dso::ErrorCode HantekDsoControl::setSamplerate(double samplerate) { |
| 626 | 619 | if (!device->isConnected()) return Dso::ErrorCode::CONNECTION; |
| 627 | 620 | |
| ... | ... | @@ -659,7 +652,7 @@ Dso::ErrorCode HantekDsoControl::setSamplerate(double samplerate) { |
| 659 | 652 | |
| 660 | 653 | // Check for Roll mode |
| 661 | 654 | if (!isRollMode()) |
| 662 | - emit recordTimeChanged((double)(getRecordLength() - controlsettings.swTrigger.sampleMargin) / | |
| 655 | + emit recordTimeChanged((double)(getRecordLength() - controlsettings.swSampleMargin) / | |
| 663 | 656 | controlsettings.samplerate.current); |
| 664 | 657 | emit samplerateChanged(controlsettings.samplerate.current); |
| 665 | 658 | |
| ... | ... | @@ -667,10 +660,6 @@ Dso::ErrorCode HantekDsoControl::setSamplerate(double samplerate) { |
| 667 | 660 | } |
| 668 | 661 | } |
| 669 | 662 | |
| 670 | -/// \brief Sets the time duration of one aquisition by adapting the samplerate. | |
| 671 | -/// \param duration The record time duration that should be met (s), 0.0 to | |
| 672 | -/// restore current record time. | |
| 673 | -/// \return The record time duration that has been set, 0.0 on error. | |
| 674 | 663 | Dso::ErrorCode HantekDsoControl::setRecordTime(double duration) { |
| 675 | 664 | if (!device->isConnected()) return Dso::ErrorCode::CONNECTION; |
| 676 | 665 | |
| ... | ... | @@ -706,10 +695,10 @@ Dso::ErrorCode HantekDsoControl::setRecordTime(double duration) { |
| 706 | 695 | // For now - we go for the 10240 size sampling - the other seems not to be supported |
| 707 | 696 | // Find highest samplerate using less than 10240 samples to obtain our duration. |
| 708 | 697 | unsigned sampleCount = 10240; |
| 698 | + if (specification.isSoftwareTriggerDevice) sampleCount -= controlsettings.swSampleMargin; | |
| 709 | 699 | unsigned sampleId; |
| 710 | 700 | for (sampleId = 0; sampleId < specification.fixedSampleRates.size(); ++sampleId) { |
| 711 | - if (specification.fixedSampleRates[sampleId].samplerate * duration < | |
| 712 | - (sampleCount - controlsettings.swTrigger.sampleMargin)) | |
| 701 | + if (specification.fixedSampleRates[sampleId].samplerate * duration < sampleCount) | |
| 713 | 702 | break; |
| 714 | 703 | } |
| 715 | 704 | // Usable sample value |
| ... | ... | @@ -722,10 +711,6 @@ Dso::ErrorCode HantekDsoControl::setRecordTime(double duration) { |
| 722 | 711 | } |
| 723 | 712 | } |
| 724 | 713 | |
| 725 | -/// \brief Enables/disables filtering of the given channel. | |
| 726 | -/// \param channel The channel that should be set. | |
| 727 | -/// \param used true if the channel should be sampled. | |
| 728 | -/// \return See ::Dso::ErrorCode. | |
| 729 | 714 | Dso::ErrorCode HantekDsoControl::setChannelUsed(ChannelID channel, bool used) { |
| 730 | 715 | if (!device->isConnected()) return Dso::ErrorCode::CONNECTION; |
| 731 | 716 | |
| ... | ... | @@ -783,10 +768,6 @@ Dso::ErrorCode HantekDsoControl::setChannelUsed(ChannelID channel, bool used) { |
| 783 | 768 | return Dso::ErrorCode::NONE; |
| 784 | 769 | } |
| 785 | 770 | |
| 786 | -/// \brief Set the coupling for the given channel. | |
| 787 | -/// \param channel The channel that should be set. | |
| 788 | -/// \param coupling The new coupling for the channel. | |
| 789 | -/// \return See ::Dso::ErrorCode. | |
| 790 | 771 | Dso::ErrorCode HantekDsoControl::setCoupling(ChannelID channel, Dso::Coupling coupling) { |
| 791 | 772 | if (!device->isConnected()) return Dso::ErrorCode::CONNECTION; |
| 792 | 773 | |
| ... | ... | @@ -801,11 +782,6 @@ Dso::ErrorCode HantekDsoControl::setCoupling(ChannelID channel, Dso::Coupling co |
| 801 | 782 | return Dso::ErrorCode::NONE; |
| 802 | 783 | } |
| 803 | 784 | |
| 804 | -/// \brief Sets the gain for the given channel. | |
| 805 | -/// Get the actual gain by specification.gainSteps[gainId] | |
| 806 | -/// \param channel The channel that should be set. | |
| 807 | -/// \param gain The gain that should be met (V/div). | |
| 808 | -/// \return The gain that has been set, ::Dso::ErrorCode on error. | |
| 809 | 785 | Dso::ErrorCode HantekDsoControl::setGain(ChannelID channel, double gain) { |
| 810 | 786 | if (!device->isConnected()) return Dso::ErrorCode::CONNECTION; |
| 811 | 787 | |
| ... | ... | @@ -842,10 +818,6 @@ Dso::ErrorCode HantekDsoControl::setGain(ChannelID channel, double gain) { |
| 842 | 818 | return Dso::ErrorCode::NONE; |
| 843 | 819 | } |
| 844 | 820 | |
| 845 | -/// \brief Set the offset for the given channel. | |
| 846 | -/// Get the actual offset for the channel from controlsettings.voltage[channel].offsetReal | |
| 847 | -/// \param channel The channel that should be set. | |
| 848 | -/// \param offset The new offset value (0.0 - 1.0). | |
| 849 | 821 | Dso::ErrorCode HantekDsoControl::setOffset(ChannelID channel, const double offset) { |
| 850 | 822 | if (!device->isConnected()) return Dso::ErrorCode::CONNECTION; |
| 851 | 823 | |
| ... | ... | @@ -873,8 +845,6 @@ Dso::ErrorCode HantekDsoControl::setOffset(ChannelID channel, const double offse |
| 873 | 845 | return Dso::ErrorCode::NONE; |
| 874 | 846 | } |
| 875 | 847 | |
| 876 | -/// \brief Set the trigger mode. | |
| 877 | -/// \return See ::Dso::ErrorCode. | |
| 878 | 848 | Dso::ErrorCode HantekDsoControl::setTriggerMode(Dso::TriggerMode mode) { |
| 879 | 849 | if (!device->isConnected()) return Dso::ErrorCode::CONNECTION; |
| 880 | 850 | |
| ... | ... | @@ -882,10 +852,6 @@ Dso::ErrorCode HantekDsoControl::setTriggerMode(Dso::TriggerMode mode) { |
| 882 | 852 | return Dso::ErrorCode::NONE; |
| 883 | 853 | } |
| 884 | 854 | |
| 885 | -/// \brief Set the trigger source. | |
| 886 | -/// \param special true for a special channel (EXT, ...) as trigger source. | |
| 887 | -/// \param id The number of the channel, that should be used as trigger. | |
| 888 | -/// \return See ::Dso::ErrorCode. | |
| 889 | 855 | Dso::ErrorCode HantekDsoControl::setTriggerSource(bool special, unsigned id) { |
| 890 | 856 | if (!device->isConnected()) return Dso::ErrorCode::CONNECTION; |
| 891 | 857 | if (specification.isSoftwareTriggerDevice) return Dso::ErrorCode::UNSUPPORTED; |
| ... | ... | @@ -932,10 +898,6 @@ Dso::ErrorCode HantekDsoControl::setTriggerSource(bool special, unsigned id) { |
| 932 | 898 | return Dso::ErrorCode::NONE; |
| 933 | 899 | } |
| 934 | 900 | |
| 935 | -/// \brief Set the trigger level. | |
| 936 | -/// \param channel The channel that should be set. | |
| 937 | -/// \param level The new trigger level (V). | |
| 938 | -/// \return The trigger level that has been set, ::Dso::ErrorCode on error. | |
| 939 | 901 | Dso::ErrorCode HantekDsoControl::setTriggerLevel(ChannelID channel, double level) { |
| 940 | 902 | if (!device->isConnected()) return Dso::ErrorCode::CONNECTION; |
| 941 | 903 | |
| ... | ... | @@ -977,9 +939,6 @@ Dso::ErrorCode HantekDsoControl::setTriggerLevel(ChannelID channel, double level |
| 977 | 939 | return Dso::ErrorCode::NONE; |
| 978 | 940 | } |
| 979 | 941 | |
| 980 | -/// \brief Set the trigger slope. | |
| 981 | -/// \param slope The Slope that should cause a trigger. | |
| 982 | -/// \return See ::Dso::ErrorCode. | |
| 983 | 942 | Dso::ErrorCode HantekDsoControl::setTriggerSlope(Dso::Slope slope) { |
| 984 | 943 | if (!device->isConnected()) return Dso::ErrorCode::CONNECTION; |
| 985 | 944 | |
| ... | ... | @@ -1009,9 +968,6 @@ Dso::ErrorCode HantekDsoControl::setTriggerSlope(Dso::Slope slope) { |
| 1009 | 968 | |
| 1010 | 969 | void HantekDsoControl::forceTrigger() { modifyCommand<BulkCommand>(BulkCode::FORCETRIGGER); } |
| 1011 | 970 | |
| 1012 | -/// \brief Set the trigger position. | |
| 1013 | -/// \param position The new trigger position (in s). | |
| 1014 | -/// \return The trigger position that has been set. | |
| 1015 | 971 | Dso::ErrorCode HantekDsoControl::setPretriggerPosition(double position) { |
| 1016 | 972 | if (!device->isConnected()) return Dso::ErrorCode::CONNECTION; |
| 1017 | 973 | ... | ... |
openhantek/src/hantekdso/hantekdsocontrol.h
| ... | ... | @@ -201,19 +201,63 @@ class HantekDsoControl : public QObject { |
| 201 | 201 | void startSampling(); |
| 202 | 202 | void stopSampling(); |
| 203 | 203 | |
| 204 | + /// \brief Sets the size of the oscilloscopes sample buffer. | |
| 205 | + /// \param index The record length index that should be set. | |
| 206 | + /// \return The record length that has been set, 0 on error. | |
| 204 | 207 | Dso::ErrorCode setRecordLength(unsigned size); |
| 208 | + /// \brief Sets the samplerate of the oscilloscope. | |
| 209 | + /// \param samplerate The samplerate that should be met (S/s), 0.0 to restore | |
| 210 | + /// current samplerate. | |
| 211 | + /// \return The samplerate that has been set, 0.0 on error. | |
| 205 | 212 | Dso::ErrorCode setSamplerate(double samplerate = 0.0); |
| 213 | + /// \brief Sets the time duration of one aquisition by adapting the samplerate. | |
| 214 | + /// \param duration The record time duration that should be met (s), 0.0 to | |
| 215 | + /// restore current record time. | |
| 216 | + /// \return The record time duration that has been set, 0.0 on error. | |
| 206 | 217 | Dso::ErrorCode setRecordTime(double duration = 0.0); |
| 207 | 218 | |
| 219 | + /// \brief Enables/disables filtering of the given channel. | |
| 220 | + /// \param channel The channel that should be set. | |
| 221 | + /// \param used true if the channel should be sampled. | |
| 222 | + /// \return See ::Dso::ErrorCode. | |
| 208 | 223 | Dso::ErrorCode setChannelUsed(ChannelID channel, bool used); |
| 224 | + /// \brief Set the coupling for the given channel. | |
| 225 | + /// \param channel The channel that should be set. | |
| 226 | + /// \param coupling The new coupling for the channel. | |
| 227 | + /// \return See ::Dso::ErrorCode. | |
| 209 | 228 | Dso::ErrorCode setCoupling(ChannelID channel, Dso::Coupling coupling); |
| 229 | + /// \brief Sets the gain for the given channel. | |
| 230 | + /// Get the actual gain by specification.gainSteps[gainId] | |
| 231 | + /// \param channel The channel that should be set. | |
| 232 | + /// \param gain The gain that should be met (V/div). | |
| 233 | + /// \return The gain that has been set, ::Dso::ErrorCode on error. | |
| 210 | 234 | Dso::ErrorCode setGain(ChannelID channel, double gain); |
| 235 | + /// \brief Set the offset for the given channel. | |
| 236 | + /// Get the actual offset for the channel from controlsettings.voltage[channel].offsetReal | |
| 237 | + /// \param channel The channel that should be set. | |
| 238 | + /// \param offset The new offset value (0.0 - 1.0). | |
| 211 | 239 | Dso::ErrorCode setOffset(ChannelID channel, const double offset); |
| 212 | 240 | |
| 241 | + /// \brief Set the trigger mode. | |
| 242 | + /// \return See ::Dso::ErrorCode. | |
| 213 | 243 | Dso::ErrorCode setTriggerMode(Dso::TriggerMode mode); |
| 244 | + /// \brief Set the trigger source. | |
| 245 | + /// \param special true for a special channel (EXT, ...) as trigger source. | |
| 246 | + /// \param id The number of the channel, that should be used as trigger. | |
| 247 | + /// \return See ::Dso::ErrorCode. | |
| 214 | 248 | Dso::ErrorCode setTriggerSource(bool special, unsigned id); |
| 249 | + /// \brief Set the trigger level. | |
| 250 | + /// \param channel The channel that should be set. | |
| 251 | + /// \param level The new trigger level (V). | |
| 252 | + /// \return The trigger level that has been set, ::Dso::ErrorCode on error. | |
| 215 | 253 | Dso::ErrorCode setTriggerLevel(ChannelID channel, double level); |
| 254 | + /// \brief Set the trigger slope. | |
| 255 | + /// \param slope The Slope that should cause a trigger. | |
| 256 | + /// \return See ::Dso::ErrorCode. | |
| 216 | 257 | Dso::ErrorCode setTriggerSlope(Dso::Slope slope); |
| 258 | + /// \brief Set the trigger position. | |
| 259 | + /// \param position The new trigger position (in s). | |
| 260 | + /// \return The trigger position that has been set. | |
| 217 | 261 | Dso::ErrorCode setPretriggerPosition(double position); |
| 218 | 262 | void forceTrigger(); |
| 219 | 263 | ... | ... |
openhantek/src/hantekdso/softwaretrigger.cpp
| ... | ... | @@ -42,8 +42,6 @@ SoftwareTrigger::PrePostStartTriggerSamples SoftwareTrigger::computeTY(const Dat |
| 42 | 42 | preTrigSamples = (unsigned)(scope->trigger.position * samplesDisplay); |
| 43 | 43 | postTrigSamples = (unsigned)sampleCount - ((unsigned)samplesDisplay - preTrigSamples); |
| 44 | 44 | |
| 45 | - const int swTriggerThreshold = 7; | |
| 46 | - const int swTriggerSampleSet = 11; | |
| 47 | 45 | double prev; |
| 48 | 46 | bool (*opcmp)(double,double,double); |
| 49 | 47 | bool (*smplcmp)(double,double); |
| ... | ... | @@ -60,11 +58,11 @@ SoftwareTrigger::PrePostStartTriggerSamples SoftwareTrigger::computeTY(const Dat |
| 60 | 58 | for (unsigned int i = preTrigSamples; i < postTrigSamples; i++) { |
| 61 | 59 | double value = samples[i]; |
| 62 | 60 | if (opcmp(value, level, prev)) { |
| 63 | - int rising = 0; | |
| 64 | - for (unsigned int k = i + 1; k < i + swTriggerSampleSet && k < sampleCount; k++) { | |
| 61 | + unsigned rising = 0; | |
| 62 | + for (unsigned int k = i + 1; k < i + scope->trigger.swTriggerSampleSet && k < sampleCount; k++) { | |
| 65 | 63 | if (smplcmp(samples[k], value)) { rising++; } |
| 66 | 64 | } |
| 67 | - if (rising > swTriggerThreshold) { | |
| 65 | + if (rising > scope->trigger.swTriggerThreshold) { | |
| 68 | 66 | swTriggerStart = i; |
| 69 | 67 | break; |
| 70 | 68 | } | ... | ... |
openhantek/src/hantekdso/softwaretrigger.h
openhantek/src/hantekdso/softwaretriggersettings.h deleted
openhantek/src/main.cpp
| ... | ... | @@ -33,7 +33,7 @@ void applySettingsToDevice(HantekDsoControl* dsoControl, DsoSettingsScope* scope |
| 33 | 33 | dsoControl->setChannelUsed(channel, mathUsed | scope->anyUsed(channel)); |
| 34 | 34 | } |
| 35 | 35 | |
| 36 | - if (scope->horizontal.samplerateSet) | |
| 36 | + if (scope->horizontal.samplerateSource == DsoSettingsScopeHorizontal::Samplerrate) | |
| 37 | 37 | dsoControl->setSamplerate(scope->horizontal.samplerate); |
| 38 | 38 | else |
| 39 | 39 | dsoControl->setRecordTime(scope->horizontal.timebase * DIVS_TIME); | ... | ... |
openhantek/src/mainwindow.cpp
| ... | ... | @@ -93,7 +93,8 @@ MainWindow::MainWindow(HantekDsoControl *dsoControl, DataAnalyzer *dataAnalyser, |
| 93 | 93 | }); |
| 94 | 94 | |
| 95 | 95 | connect(dsoControl, &HantekDsoControl::recordTimeChanged, [this](double duration) { |
| 96 | - if (this->settings->scope.horizontal.samplerateSet && this->settings->scope.horizontal.recordLength != UINT_MAX) { | |
| 96 | + if (this->settings->scope.horizontal.samplerateSource == DsoSettingsScopeHorizontal::Samplerrate && | |
| 97 | + this->settings->scope.horizontal.recordLength != UINT_MAX) { | |
| 97 | 98 | // The samplerate was set, let's adapt the timebase accordingly |
| 98 | 99 | this->settings->scope.horizontal.timebase = horizontalDock->setTimebase(duration / DIVS_TIME); |
| 99 | 100 | } |
| ... | ... | @@ -106,7 +107,8 @@ MainWindow::MainWindow(HantekDsoControl *dsoControl, DataAnalyzer *dataAnalyser, |
| 106 | 107 | dsoWidget->updateTimebase(this->settings->scope.horizontal.timebase); |
| 107 | 108 | }); |
| 108 | 109 | connect(dsoControl, &HantekDsoControl::samplerateChanged, [this](double samplerate) { |
| 109 | - if (!this->settings->scope.horizontal.samplerateSet && this->settings->scope.horizontal.recordLength != UINT_MAX) { | |
| 110 | + if (this->settings->scope.horizontal.samplerateSource == DsoSettingsScopeHorizontal::Duration && | |
| 111 | + this->settings->scope.horizontal.recordLength != UINT_MAX) { | |
| 110 | 112 | // The timebase was set, let's adapt the samplerate accordingly |
| 111 | 113 | this->settings->scope.horizontal.samplerate = samplerate; |
| 112 | 114 | horizontalDock->setSamplerate(samplerate); |
| ... | ... | @@ -259,7 +261,7 @@ MainWindow::MainWindow(HantekDsoControl *dsoControl, DataAnalyzer *dataAnalyser, |
| 259 | 261 | |
| 260 | 262 | }); |
| 261 | 263 | |
| 262 | - if (settings->scope.horizontal.samplerateSet) | |
| 264 | + if (settings->scope.horizontal.samplerateSource == DsoSettingsScopeHorizontal::Samplerrate) | |
| 263 | 265 | dsoWidget->updateSamplerate(settings->scope.horizontal.samplerate); |
| 264 | 266 | else |
| 265 | 267 | dsoWidget->updateTimebase(settings->scope.horizontal.timebase); | ... | ... |
openhantek/src/scopesettings.h
| ... | ... | @@ -5,9 +5,9 @@ |
| 5 | 5 | #include <QString> |
| 6 | 6 | |
| 7 | 7 | #include "analyse/enums.h" |
| 8 | +#include "hantekdso/controlspecification.h" | |
| 8 | 9 | #include "hantekdso/enums.h" |
| 9 | 10 | #include "hantekprotocol/definitions.h" |
| 10 | -#include "hantekdso/controlspecification.h" | |
| 11 | 11 | #include <vector> |
| 12 | 12 | |
| 13 | 13 | #define MARKER_COUNT 2 ///< Number of markers |
| ... | ... | @@ -15,23 +15,28 @@ |
| 15 | 15 | /// \brief Holds the settings for the horizontal axis. |
| 16 | 16 | struct DsoSettingsScopeHorizontal { |
| 17 | 17 | Dso::GraphFormat format = Dso::GraphFormat::TY; ///< Graph drawing mode of the scope |
| 18 | - double frequencybase = 1e3; ///< Frequencybase in Hz/div | |
| 19 | - double marker[MARKER_COUNT] = {-1.0, 1.0}; ///< Marker positions in div | |
| 20 | - bool marker_visible[MARKER_COUNT]; | |
| 21 | - double timebase = 1e-3; ///< Timebase in s/div | |
| 18 | + double frequencybase = 1e3; ///< Frequencybase in Hz/div | |
| 19 | + double marker[MARKER_COUNT] = {-1.0, 1.0}; ///< Marker positions in div | |
| 20 | + bool marker_visible[MARKER_COUNT] = {true, true}; | |
| 21 | + | |
| 22 | 22 | unsigned int recordLength = 0; ///< Sample count |
| 23 | + | |
| 24 | + ///TODO Use ControlSettingsSamplerateTarget | |
| 25 | + double timebase = 1e-3; ///< Timebase in s/div | |
| 23 | 26 | double samplerate = 1e6; ///< The samplerate of the oscilloscope in S |
| 24 | - bool samplerateSet = false; ///< The samplerate was set by the user, not the timebase | |
| 27 | + enum SamplerateSource { Samplerrate, Duration } samplerateSource = Samplerrate; | |
| 25 | 28 | }; |
| 26 | 29 | |
| 27 | 30 | /// \brief Holds the settings for the trigger. |
| 31 | +/// TODO Use ControlSettingsTrigger | |
| 28 | 32 | struct DsoSettingsScopeTrigger { |
| 29 | - bool filter = true; ///< Not sure what this is good for... | |
| 30 | 33 | Dso::TriggerMode mode = Dso::TriggerMode::NORMAL; ///< Automatic, normal or single trigger |
| 31 | - double position = 0.0; ///< Horizontal position for pretrigger | |
| 34 | + double position = 0.0; ///< Horizontal position for pretrigger | |
| 32 | 35 | Dso::Slope slope = Dso::Slope::Positive; ///< Rising or falling edge causes trigger |
| 33 | - unsigned int source = 0; ///< Channel that is used as trigger source | |
| 34 | - bool special = false; ///< true if the trigger source is not a standard channel | |
| 36 | + unsigned int source = 0; ///< Channel that is used as trigger source | |
| 37 | + bool special = false; ///< true if the trigger source is not a standard channel | |
| 38 | + unsigned swTriggerThreshold = 7; ///< Software trigger, threshold | |
| 39 | + unsigned swTriggerSampleSet = 11; ///< Software trigger, sample set | |
| 35 | 40 | }; |
| 36 | 41 | |
| 37 | 42 | /// \brief Holds the settings for the spectrum analysis. |
| ... | ... | @@ -44,6 +49,7 @@ struct DsoSettingsScopeSpectrum { |
| 44 | 49 | }; |
| 45 | 50 | |
| 46 | 51 | /// \brief Holds the settings for the normal voltage graphs. |
| 52 | +/// TODO Use ControlSettingsVoltage | |
| 47 | 53 | struct DsoSettingsScopeVoltage { |
| 48 | 54 | unsigned gainStepIndex = 6; ///< The vertical resolution in V/div (default = 1.0) |
| 49 | 55 | bool inverted = false; ///< true if the channel is inverted (mirrored on cross-axis) |
| ... | ... | @@ -70,15 +76,10 @@ struct DsoSettingsScope { |
| 70 | 76 | double spectrumReference = 0.0; ///< Reference level for spectrum in dBm |
| 71 | 77 | double spectrumLimit = -20.0; ///< Minimum magnitude of the spectrum (Avoids peaks) |
| 72 | 78 | |
| 73 | - double gain(unsigned channel) const { | |
| 74 | - return gainSteps[voltage[channel].gainStepIndex]; | |
| 75 | - } | |
| 76 | - bool anyUsed(ChannelID channel) { | |
| 77 | - return voltage[channel].used | spectrum[channel].used; | |
| 78 | - } | |
| 79 | + double gain(unsigned channel) const { return gainSteps[voltage[channel].gainStepIndex]; } | |
| 80 | + bool anyUsed(ChannelID channel) { return voltage[channel].used | spectrum[channel].used; } | |
| 79 | 81 | |
| 80 | - Dso::Coupling coupling(ChannelID channel, const Dso::ControlSpecification* deviceSpecification) { | |
| 82 | + Dso::Coupling coupling(ChannelID channel, const Dso::ControlSpecification *deviceSpecification) { | |
| 81 | 83 | return deviceSpecification->couplings[voltage[channel].couplingIndex]; |
| 82 | 84 | } |
| 83 | - | |
| 84 | 85 | }; | ... | ... |
openhantek/src/settings.cpp
| ... | ... | @@ -84,11 +84,10 @@ void DsoSettings::load() { |
| 84 | 84 | if (store->contains("timebase")) scope.horizontal.timebase = store->value("timebase").toDouble(); |
| 85 | 85 | if (store->contains("recordLength")) scope.horizontal.recordLength = store->value("recordLength").toUInt(); |
| 86 | 86 | if (store->contains("samplerate")) scope.horizontal.samplerate = store->value("samplerate").toDouble(); |
| 87 | - if (store->contains("samplerateSet")) scope.horizontal.samplerateSet = store->value("samplerateSet").toBool(); | |
| 87 | + if (store->contains("samplerateSet")) scope.horizontal.samplerateSource = (DsoSettingsScopeHorizontal::SamplerateSource)store->value("samplerateSet").toInt(); | |
| 88 | 88 | store->endGroup(); |
| 89 | 89 | // Trigger |
| 90 | 90 | store->beginGroup("trigger"); |
| 91 | - if (store->contains("filter")) scope.trigger.filter = store->value("filter").toBool(); | |
| 92 | 91 | if (store->contains("mode")) scope.trigger.mode = (Dso::TriggerMode)store->value("mode").toUInt(); |
| 93 | 92 | if (store->contains("position")) scope.trigger.position = store->value("position").toDouble(); |
| 94 | 93 | if (store->contains("slope")) scope.trigger.slope = (Dso::Slope)store->value("slope").toUInt(); |
| ... | ... | @@ -186,11 +185,10 @@ void DsoSettings::save() { |
| 186 | 185 | store->setValue("timebase", scope.horizontal.timebase); |
| 187 | 186 | store->setValue("recordLength", scope.horizontal.recordLength); |
| 188 | 187 | store->setValue("samplerate", scope.horizontal.samplerate); |
| 189 | - store->setValue("samplerateSet", scope.horizontal.samplerateSet); | |
| 188 | + store->setValue("samplerateSet", (int)scope.horizontal.samplerateSource); | |
| 190 | 189 | store->endGroup(); |
| 191 | 190 | // Trigger |
| 192 | 191 | store->beginGroup("trigger"); |
| 193 | - store->setValue("filter", scope.trigger.filter); | |
| 194 | 192 | store->setValue("mode", (unsigned)scope.trigger.mode); |
| 195 | 193 | store->setValue("position", scope.trigger.position); |
| 196 | 194 | store->setValue("slope", (unsigned)scope.trigger.slope); | ... | ... |