IQ.Pilot Release Commit @ 0b96bd5

This commit is contained in:
IQ.Lvbs CI [bot]
2026-09-02 16:46:45 -05:00
parent 4fb3da761f
commit 7745f48100
162 changed files with 12835 additions and 9476 deletions

View File

@@ -4,6 +4,7 @@
#include <array>
#include <condition_variable>
#include <chrono>
#include <functional>
#include <memory>
#include <mutex>
#include <optional>
@@ -14,16 +15,15 @@
#include "cereal/messaging/messaging.h"
#include "tools/cabana/core/can_data.h"
#include "tools/cabana/core/observable.h"
#include "tools/cabana/dbc/dbcmanager.h"
#include "tools/cabana/utils/util.h"
#include "tools/replay/util.h"
class AbstractStream : public QObject {
Q_OBJECT
class AbstractStream {
public:
AbstractStream(QObject *parent);
virtual ~AbstractStream() {}
AbstractStream();
virtual ~AbstractStream() = default;
virtual void start() = 0;
virtual bool liveStreaming() const { return true; }
virtual void seekTo(double ts) {}
@@ -56,22 +56,25 @@ public:
void clearSuppressed();
void suppressDefinedSignals(bool suppress);
signals:
void paused();
void resume();
void seeking(double sec);
void seekedTo(double sec);
void timeRangeChanged(const std::optional<std::pair<double, double>> &range);
void eventsMerged(const MessageEventsMap &events_map);
void msgsReceived(const std::set<MessageId> *new_msgs, bool has_new_ids);
void sourcesUpdated(const SourceSet &s);
void privateUpdateLastMsgsSignal();
public:
Observable<> paused;
Observable<> resume;
Observable<double> seeking;
Observable<double> seekedTo;
Observable<const std::optional<std::pair<double, double>> &> timeRangeChanged;
Observable<const MessageEventsMap &> eventsMerged;
Observable<const std::set<MessageId> *, bool> msgsReceived;
Observable<const std::string &> error;
SourceSet sources;
protected:
void postToMainThread(std::function<void()> fn);
void postToMainThreadAndWait(std::function<void()> fn);
void cancelWaits();
void requestUpdateLastMessages() { postToMainThread([this]() { updateLastMessages(); }); }
void mergeEvents(const std::vector<const CanEvent *> &events);
void insertEvents(const std::vector<const CanEvent *> &events, const MessageEventsMap &msg_events);
const CanEvent *newEvent(uint64_t mono_time, const cereal::CanData::Reader &c);
void updateEvent(const MessageId &id, double sec, const uint8_t *data, uint8_t size);
void waitForSeekFinshed();
@@ -87,33 +90,24 @@ private:
MessageEventsMap events_;
std::unordered_map<MessageId, CanData> last_msgs;
std::unique_ptr<MonotonicBuffer> event_buffer_;
std::shared_ptr<bool> alive_ = std::make_shared<bool>(true);
Connections connections_;
// Members accessed in multiple threads. (mutex protected)
std::mutex mutex_;
std::condition_variable seek_finished_cv_;
std::condition_variable wait_cv_;
bool seek_finished_ = false;
bool exiting_ = false;
std::set<MessageId> new_msgs_;
std::unordered_map<MessageId, CanData> messages_;
std::unordered_map<MessageId, std::vector<uint8_t>> masks_;
};
class AbstractOpenStreamWidget : public QWidget {
Q_OBJECT
public:
AbstractOpenStreamWidget(QWidget *parent = nullptr) : QWidget(parent) {}
virtual AbstractStream *open() = 0;
signals:
void enableOpenButton(bool);
};
class DummyStream : public AbstractStream {
Q_OBJECT
public:
DummyStream(QObject *parent) : AbstractStream(parent) {}
std::string routeName() const override { return "No Stream"; }
void start() override {}
};
// A global pointer referring to the unique AbstractStream object
extern AbstractStream *can;