@@ -491,6 +491,9 @@ bool DemoOscilloscope::AcquireData()
491491 if (!m_triggerArmed)
492492 return false ;
493493
494+ // prepare all channels to be 'about to download'
495+ ChannelsDownloadStarted ();
496+
494497 // cap waveform rate at 50 wfm/s to avoid saturating cpu
495498 std::this_thread::sleep_for (std::chrono::microseconds (20 * 1000 ));
496499
@@ -531,38 +534,51 @@ bool DemoOscilloscope::AcquireData()
531534 if (!m_channelsEnabled[i])
532535 continue ;
533536
537+ // Lambda passed to generate waveform methods to update "download" percentage
538+ auto updateProgress = [i,this ](float progress)
539+ {
540+ this ->ChannelsDownloadStatusUpdate (i, InstrumentChannel::DownloadState::DOWNLOAD_IN_PROGRESS, progress);
541+ };
542+ this ->ChannelsDownloadStatusUpdate (i, InstrumentChannel::DownloadState::DOWNLOAD_IN_PROGRESS, 0.0 );
534543 switch (i)
535544 {
536545 case 0 :
537546 waveforms[i] = m_source[i]->GenerateNoisySinewave (
538- 0.9 , 0.0 , 1e6 , sampleperiod, depth, noise[0 ]);
547+ 0.9 , 0.0 , 1e6 , sampleperiod, depth, updateProgress, noise[0 ]);
539548 break ;
540549
541550 case 1 :
542551 waveforms[i] = m_source[i]->GenerateNoisySinewaveSum (
543- 0.9 , 0.0 , M_PI_4, 1e6 , sweepPeriod, sampleperiod, depth, noise[1 ]);
552+ 0.9 , 0.0 , M_PI_4, 1e6 , sweepPeriod, sampleperiod, depth, updateProgress, noise[1 ]);
544553 break ;
545554
546555 case 2 :
556+
547557 waveforms[i] = m_source[i]->GeneratePRBS31 (
548- *m_cmdBuf[i], m_queue[i], 0.9 , 96969.6 , sampleperiod, depth, lpf2, noise[2 ]);
558+ *m_cmdBuf[i], m_queue[i], 0.9 , 96969.6 , sampleperiod, depth,
559+ updateProgress,
560+ lpf2, noise[2 ]);
549561 break ;
550562
551563 case 3 :
552564 waveforms[i] = m_source[i]->Generate8b10b (
553- *m_cmdBuf[i], m_queue[i], 0.9 , 800e3 , sampleperiod, depth, lpf3, noise[3 ]);
565+ *m_cmdBuf[i], m_queue[i], 0.9 , 800e3 , sampleperiod, depth, updateProgress, lpf3, noise[3 ]);
554566 break ;
555567
556568 default :
557569 break ;
558570 }
559571
560572 waveforms[i]->MarkModifiedFromCpu ();
573+ this ->ChannelsDownloadStatusUpdate (i, InstrumentChannel::DownloadState::DOWNLOAD_FINISHED, 1.0 );
561574 }
562575
563576 SequenceSet s;
564577 for (int i=0 ; i<4 ; i++)
578+ {
565579 s[GetOscilloscopeChannel (i)] = waveforms[i];
580+ this ->ChannelsDownloadStatusUpdate (i, InstrumentChannel::DownloadState::DOWNLOAD_NONE, 0.0 );
581+ }
566582
567583 // Timestamp the waveform(s)
568584 double now = GetTime ();
0 commit comments