2
0
forked from Ivasoft/DSView

fix: The Scope got an invalid measure value when the param channged

This commit is contained in:
dreamsourcelabTAI
2023-06-07 17:39:49 +08:00
parent d73712abbd
commit 905f4212fc
4 changed files with 46 additions and 5 deletions

View File

@@ -48,7 +48,9 @@ DsoSnapshot::DsoSnapshot() :
_envelope_en = false;
_envelope_done = false;
_instant = false;
_threshold = 0;
_threshold = 0;
_measure_voltage_factor1 = 0;
_measure_voltage_factor2 = 0;
memset(_envelope_levels, 0, sizeof(_envelope_levels));
}

View File

@@ -111,6 +111,22 @@ public:
return _threshold;
}
inline void set_measure_voltage_factor1(uint64_t v){
_measure_voltage_factor1 = v;
}
inline uint64_t get_measure_voltage_factor1(){
return _measure_voltage_factor1;
}
inline void set_measure_voltage_factor2(uint64_t v){
_measure_voltage_factor2 = v;
}
inline uint64_t get_measure_voltage_factor2(){
return _measure_voltage_factor2;
}
private:
void append_data(void *data, uint64_t samples, bool instant);
void free_envelop();
@@ -126,6 +142,8 @@ private:
bool _instant;
std::vector<uint8_t*> _ch_data;
float _threshold;
uint64_t _measure_voltage_factor1;
uint64_t _measure_voltage_factor2;
friend class DsoSnapshotTest::Basic;
};

View File

@@ -375,6 +375,21 @@ namespace pv
_capture_data->get_logic()->set_samplerate(samplerate);
_capture_data->get_analog()->set_samplerate(samplerate);
_capture_data->get_dso()->set_samplerate(samplerate);
if (_device_agent.get_work_mode() == DSO)
{
for(auto s : _signals){
if (s->get_type() == SR_CHANNEL_DSO){
view::DsoSignal *ch = (view::DsoSignal*)s;
uint64_t k = ch->get_vDial()->get_value() * ch->get_vDial()->get_factor();
if (ch->get_index() == 0)
_capture_data->get_dso()->set_measure_voltage_factor1(k);
else
_capture_data->get_dso()->set_measure_voltage_factor2(k);
}
}
}
// DecoderStack
for (auto d : _decode_traces)

View File

@@ -1494,12 +1494,14 @@ double DsoSignal::get_voltage(uint64_t index)
if (index >= _data->get_sample_count())
return 1;
assert(_data);
const double value = *_data->get_samples(index, index, get_index());
const int hw_offset = get_hw_offset();
uint64_t k = get_index() == 0 ? _data->get_measure_voltage_factor1() : _data->get_measure_voltage_factor2();
return (hw_offset - value) * _scale *
_vDial->get_value() * _vDial->get_factor() *
return (hw_offset - value) * _scale * k *
DS_CONF_DSO_VDIVS / get_view_rect().height();
}
@@ -1513,10 +1515,14 @@ QString DsoSignal::get_voltage(double v, int p, bool scaled)
assert(false);
}
assert(_data);
uint64_t k = get_index() == 0 ? _data->get_measure_voltage_factor1() : _data->get_measure_voltage_factor2();
if (scaled)
v = v * _vDial->get_value() * _vDial->get_factor() * DS_CONF_DSO_VDIVS / get_view_rect().height();
v = v * k * DS_CONF_DSO_VDIVS / get_view_rect().height();
else
v = v * _scale * _vDial->get_value() * _vDial->get_factor() * DS_CONF_DSO_VDIVS / get_view_rect().height();
v = v * _scale * k * DS_CONF_DSO_VDIVS / get_view_rect().height();
return abs(v) >= 1000 ? QString::number(v/1000.0, 'f', p) + "V" : QString::number(v, 'f', p) + "mV";
}