mirror of
https://github.com/sunnypilot/sunnypilot.git
synced 2026-02-19 11:13:53 +08:00
* increase form size & fix wrong charts number
* set max axisy to 1.0 if no value
* show 'close' button in floating window
* alwasy show scroll bar
* complete the logs
* more
* increase size to 50
* keep logs for all messages
* more
* rename signal
* better height
* avoid flicker
* dont call setupdatesenabled
* filter dbc files bye typing
* remove all charts if dbc file changed
* fix wrong idx
* bolder dbc filename
* update chart if signal has been edited
* new signals signalAdded,signalUpdated
* split class Parser into CanMessages and DBCManager
* cleanup
* updateState after set message
* cleanup
* emit msgUpdated
* clear history log if selected range changed
* always update time
* change title layout
* show selected range
hide title bar if no charts
less space between title and chart
* custome historylogmodel for extreme fast update
* move historylog to seperate file
* 2 decimal
* cleanup
cleanup
* left click on the chart to set start time
* todo
* show tooltip for header item&cleanup binaryview
add hline to signal form
* better paint
* cleanup signals/slots
* better range if min==max
* set historylog's minheight to 300
* 3x faster,sortable message list.
* zero copy in queued connection
* proxymodel
* clear log if loop to the begin
* simplify history log
* remove icon
* remove assets
* hide linemarker on initialization
* rubber width may less than 0
* dont zoom char if selected range is too small
* cleanup messageslist
* don't zoom chart if selected range less than 500ms
* typo
* check boundary
* check msg_id
* capital first letter
* move history log out of scrollarea
* Show only one form at a time
* auto scroll to header
d
* reduce msg size
entire row clickable
rename filter_msgs
old-commit-hash: 0fa1588f6c
58 lines
2.2 KiB
C++
58 lines
2.2 KiB
C++
#include <QApplication>
|
|
#include <QCommandLineParser>
|
|
|
|
#include "tools/replay/consoleui.h"
|
|
#include "tools/replay/replay.h"
|
|
|
|
int main(int argc, char *argv[]) {
|
|
QCoreApplication app(argc, argv);
|
|
|
|
const std::tuple<QString, REPLAY_FLAGS, QString> flags[] = {
|
|
{"dcam", REPLAY_FLAG_DCAM, "load driver camera"},
|
|
{"ecam", REPLAY_FLAG_ECAM, "load wide road camera"},
|
|
{"no-loop", REPLAY_FLAG_NO_LOOP, "stop at the end of the route"},
|
|
{"no-cache", REPLAY_FLAG_NO_FILE_CACHE, "turn off local cache"},
|
|
{"qcam", REPLAY_FLAG_QCAMERA, "load qcamera"},
|
|
{"no-hw-decoder", REPLAY_FLAG_NO_HW_DECODER, "disable HW video decoding"},
|
|
{"no-vipc", REPLAY_FLAG_NO_VIPC, "do not output video"},
|
|
};
|
|
|
|
QCommandLineParser parser;
|
|
parser.setApplicationDescription("Mock openpilot components by publishing logged messages.");
|
|
parser.addHelpOption();
|
|
parser.addPositionalArgument("route", "the drive to replay. find your drives at connect.comma.ai");
|
|
parser.addOption({{"a", "allow"}, "whitelist of services to send", "allow"});
|
|
parser.addOption({{"b", "block"}, "blacklist of services to send", "block"});
|
|
parser.addOption({{"s", "start"}, "start from <seconds>", "seconds"});
|
|
parser.addOption({"demo", "use a demo route instead of providing your own"});
|
|
parser.addOption({"data_dir", "local directory with routes", "data_dir"});
|
|
for (auto &[name, _, desc] : flags) {
|
|
parser.addOption({name, desc});
|
|
}
|
|
|
|
parser.process(app);
|
|
const QStringList args = parser.positionalArguments();
|
|
if (args.empty() && !parser.isSet("demo")) {
|
|
parser.showHelp();
|
|
}
|
|
|
|
const QString route = args.empty() ? DEMO_ROUTE : args.first();
|
|
QStringList allow = parser.value("allow").isEmpty() ? QStringList{} : parser.value("allow").split(",");
|
|
QStringList block = parser.value("block").isEmpty() ? QStringList{} : parser.value("block").split(",");
|
|
|
|
uint32_t replay_flags = REPLAY_FLAG_NONE;
|
|
for (const auto &[name, flag, _] : flags) {
|
|
if (parser.isSet(name)) {
|
|
replay_flags |= flag;
|
|
}
|
|
}
|
|
Replay *replay = new Replay(route, allow, block, nullptr, replay_flags, parser.value("data_dir"), &app);
|
|
if (!replay->load()) {
|
|
return 0;
|
|
}
|
|
|
|
ConsoleUI console_ui(replay);
|
|
replay->start(parser.value("start").toInt());
|
|
return app.exec();
|
|
}
|