MCPcopy Index your code
hub / github.com/DreamSourceLab/DSView / calc_math

Method calc_math

DSView/pv/data/mathstack.cpp:361–428  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

359}
360
361void MathStack::calc_math(uint64_t mathFactor)
362{
363 assert(mathFactor > 0);
364
365 std::lock_guard<std::mutex> lock(_mutex);
366
367 _math_state = Running;
368
369 const auto data = _dsoSig1->data();
370
371 if (data->empty() || _math.size() < _total_sample_num)
372 return;
373
374 if (!_dsoSig1->enabled() || !_dsoSig2->enabled())
375 return;
376
377 if (data->get_channel_num() < 2)
378 return;
379
380 auto k1 = _dsoSig1->get_factor();
381 auto k2 = _dsoSig2->get_factor();
382
383 const double scale1 = _dsoSig1->get_vDialValue() / 1000.0 * k1 * DS_CONF_DSO_VDIVS *
384 _dsoSig1->get_scale() / _dsoSig1->get_view_rect().height();
385
386 const double delta1 = _dsoSig1->get_hw_offset() * scale1;
387
388 const double scale2 = _dsoSig2->get_vDialValue() / 1000.0 * k2 * DS_CONF_DSO_VDIVS *
389 _dsoSig2->get_scale() / _dsoSig2->get_view_rect().height();
390
391 const double delta2 = _dsoSig2->get_hw_offset() * scale2;
392
393 _sample_num = data->get_sample_count();
394 assert(_sample_num <= _total_sample_num);
395
396 const int index1 = _dsoSig1->get_index();
397 const int index2 = _dsoSig2->get_index();
398 const uint8_t* value_buffer1 = data->get_samples(0, 0, index1);
399 const uint8_t* value_buffer2 = data->get_samples(0, 0, index2);
400 double value1, value2;
401
402 for (uint64_t sample = 0; sample < _sample_num; sample++) {
403 value1 = *(value_buffer1 + sample);
404 value2 = *(value_buffer2 + sample);
405
406 switch(_type)
407 {
408 case MATH_ADD:
409 _math[sample] = ((delta1 - scale1 * value1) + (delta2 - scale2 * value2)) / mathFactor;
410 break;
411 case MATH_SUB:
412 _math[sample] = ((delta1 - scale1 * value1) - (delta2 - scale2 * value2)) / mathFactor;
413 break;
414 case MATH_MUL:
415 _math[sample] = (delta1 - scale1 * value1) * (delta2 - scale2 * value2) / mathFactor;
416 break;
417 case MATH_DIV:
418 _math[sample] = (delta1 - scale1 * value1) / (delta2 - scale2 * value2) / mathFactor;

Callers 2

feed_in_dsoMethod · 0.80
math_rebuildMethod · 0.80

Calls 13

emptyMethod · 0.80
sizeMethod · 0.80
get_channel_numMethod · 0.80
get_sample_countMethod · 0.80
dataMethod · 0.45
enabledMethod · 0.45
get_factorMethod · 0.45
get_vDialValueMethod · 0.45
get_scaleMethod · 0.45
get_view_rectMethod · 0.45
get_hw_offsetMethod · 0.45
get_indexMethod · 0.45

Tested by

no test coverage detected