You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							56 lines
						
					
					
						
							1.4 KiB
						
					
					
				
			
		
		
	
	
							56 lines
						
					
					
						
							1.4 KiB
						
					
					
				| #pragma once
 | |
| 
 | |
| #include <algorithm>
 | |
| #include <memory>
 | |
| #include <vector>
 | |
| 
 | |
| #include <QBasicTimer>
 | |
| 
 | |
| #include "tools/cabana/streams/abstractstream.h"
 | |
| 
 | |
| class LiveStream : public AbstractStream {
 | |
|   Q_OBJECT
 | |
| 
 | |
| public:
 | |
|   LiveStream(QObject *parent);
 | |
|   virtual ~LiveStream();
 | |
|   void start() override;
 | |
|   void stop();
 | |
|   inline QDateTime beginDateTime() const { return begin_date_time; }
 | |
|   inline uint64_t beginMonoTime() const override { return begin_event_ts; }
 | |
|   double maxSeconds() const override { return std::max(1.0, (lastest_event_ts - begin_event_ts) / 1e9); }
 | |
|   void setSpeed(float speed) override { speed_ = speed; }
 | |
|   double getSpeed() override { return speed_; }
 | |
|   bool isPaused() const override { return paused_; }
 | |
|   void pause(bool pause) override;
 | |
|   void seekTo(double sec) override;
 | |
| 
 | |
| protected:
 | |
|   virtual void streamThread() = 0;
 | |
|   void handleEvent(kj::ArrayPtr<capnp::word> event);
 | |
| 
 | |
| private:
 | |
|   void startUpdateTimer();
 | |
|   void timerEvent(QTimerEvent *event) override;
 | |
|   void updateEvents();
 | |
| 
 | |
|   std::mutex lock;
 | |
|   QThread *stream_thread;
 | |
|   std::vector<const CanEvent *> received_events_;
 | |
| 
 | |
|   int timer_id;
 | |
|   QBasicTimer update_timer;
 | |
| 
 | |
|   QDateTime begin_date_time;
 | |
|   uint64_t begin_event_ts = 0;
 | |
|   uint64_t lastest_event_ts = 0;
 | |
|   uint64_t current_event_ts = 0;
 | |
|   uint64_t first_event_ts = 0;
 | |
|   uint64_t first_update_ts = 0;
 | |
|   bool post_last_event = true;
 | |
|   double speed_ = 1;
 | |
|   bool paused_ = false;
 | |
| 
 | |
|   struct Logger;
 | |
|   std::unique_ptr<Logger> logger;
 | |
| };
 | |
| 
 |