|
|
|
@ -10,7 +10,6 @@ |
|
|
|
|
#include <QThread> |
|
|
|
|
|
|
|
|
|
const QString DEMO_ROUTE = "4cf7a6ad03080c90|2021-09-29--13-46-36"; |
|
|
|
|
|
|
|
|
|
struct termios oldt = {}; |
|
|
|
|
|
|
|
|
|
void sigHandler(int s) { |
|
|
|
@ -75,6 +74,12 @@ int main(int argc, char *argv[]){ |
|
|
|
|
std::signal(SIGINT, sigHandler); |
|
|
|
|
std::signal(SIGTERM, sigHandler); |
|
|
|
|
|
|
|
|
|
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"}, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
QCommandLineParser parser; |
|
|
|
|
parser.setApplicationDescription("Mock openpilot components by publishing logged messages."); |
|
|
|
|
parser.addHelpOption(); |
|
|
|
@ -84,8 +89,9 @@ int main(int argc, char *argv[]){ |
|
|
|
|
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"}); |
|
|
|
|
parser.addOption({"dcam", "load driver camera"}); |
|
|
|
|
parser.addOption({"ecam", "load wide road camera"}); |
|
|
|
|
for (auto &[name, _, desc] : flags) { |
|
|
|
|
parser.addOption({name, desc}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
parser.process(app); |
|
|
|
|
const QStringList args = parser.positionalArguments(); |
|
|
|
@ -97,7 +103,13 @@ int main(int argc, char *argv[]){ |
|
|
|
|
QStringList allow = parser.value("allow").isEmpty() ? QStringList{} : parser.value("allow").split(","); |
|
|
|
|
QStringList block = parser.value("block").isEmpty() ? QStringList{} : parser.value("block").split(","); |
|
|
|
|
|
|
|
|
|
Replay *replay = new Replay(route, allow, block, nullptr, parser.isSet("dcam"), parser.isSet("ecam"), parser.value("data_dir"), &app); |
|
|
|
|
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; |
|
|
|
|
} |
|
|
|
|