* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#ifdef _WIN32
+// Windows: Avoid boost/thread namespace pollution (which includes windows.h).
+#define NOGDI
+#define NORESOURCE
+#endif
#include <boost/thread/locks.hpp>
#include <boost/thread/shared_mutex.hpp>
return data;
}
+double Session::get_samplerate() const
+{
+ double samplerate = 0.0;
+
+ for (const shared_ptr<pv::data::SignalData> d : get_data()) {
+ assert(d);
+ const vector< shared_ptr<pv::data::Segment> > segments =
+ d->segments();
+ for (const shared_ptr<pv::data::Segment> &s : segments)
+ samplerate = std::max(samplerate, s->samplerate());
+ }
+
+ // If there is no sample rate given we use samples as unit
+ if (samplerate == 0.0)
+ samplerate = 1.0;
+
+ return samplerate;
+}
+
const unordered_set< shared_ptr<view::Signal> > Session::signals() const
{
shared_lock<shared_mutex> lock(signals_mutex_);
signals_changed();
}
+void Session::feed_in_trigger()
+{
+ // The channel containing most samples should be most accurate
+ uint64_t sample_count = 0;
+
+ for (const shared_ptr<pv::data::SignalData> d : get_data()) {
+ assert(d);
+ uint64_t temp_count = 0;
+
+ const vector< shared_ptr<pv::data::Segment> > segments =
+ d->segments();
+ for (const shared_ptr<pv::data::Segment> &s : segments)
+ temp_count += s->get_sample_count();
+
+ if (temp_count > sample_count)
+ sample_count = temp_count;
+ }
+
+ trigger_event(sample_count / get_samplerate());
+}
+
void Session::feed_in_frame_begin()
{
if (cur_logic_segment_ || !cur_analog_segments_.empty())
feed_in_meta(dynamic_pointer_cast<Meta>(packet->payload()));
break;
+ case SR_DF_TRIGGER:
+ feed_in_trigger();
+ break;
+
case SR_DF_FRAME_BEGIN:
feed_in_frame_begin();
break;