mirror of
https://github.com/infiniteCable2/openpilot.git
synced 2026-08-08 01:35:48 +08:00
Record feedback with LKAS button (#35888)
* record feedback with LKAS button * fix alert test * slightly simplify feedbackd * "Audio Feedback Saved" upon time expiration or early stop * earlySend --> earlyStop * userFlag --> userBookmark * RecordAudioFeedback param/toggle * add audioFeedback test * simplify feedbackd * send bookmark regardless of toggle, show feedback event with higher priority * add userBookmark to selfdrived sm * fix mispelled param name * default off and move to main * segmentNum --> blockNum, earlyStop --> lastBlock * preserve audioFeedback * get rid of lastBlock and just send bookmark saved at the end * update raylib side * update toggle description and add raylib toggle --------- Co-authored-by: Adeeb Shihadeh <adeebshihadeh@gmail.com>
This commit is contained in:
@@ -19,7 +19,7 @@ const int THUMBNAIL_MARGIN = 3;
|
||||
static const QColor timeline_colors[] = {
|
||||
[(int)TimelineType::None] = QColor(111, 143, 175),
|
||||
[(int)TimelineType::Engaged] = QColor(0, 163, 108),
|
||||
[(int)TimelineType::UserFlag] = Qt::magenta,
|
||||
[(int)TimelineType::UserBookmark] = Qt::magenta,
|
||||
[(int)TimelineType::AlertInfo] = Qt::green,
|
||||
[(int)TimelineType::AlertWarning] = QColor(255, 195, 0),
|
||||
[(int)TimelineType::AlertCritical] = QColor(199, 0, 57),
|
||||
@@ -64,7 +64,7 @@ VideoWidget::VideoWidget(QWidget *parent) : QFrame(parent) {
|
||||
Pause/Resume: <span style="background-color:lightGray;color:gray"> space </span>
|
||||
)").arg(timeline_colors[(int)TimelineType::None].name(),
|
||||
timeline_colors[(int)TimelineType::Engaged].name(),
|
||||
timeline_colors[(int)TimelineType::UserFlag].name(),
|
||||
timeline_colors[(int)TimelineType::UserBookmark].name(),
|
||||
timeline_colors[(int)TimelineType::AlertInfo].name(),
|
||||
timeline_colors[(int)TimelineType::AlertWarning].name(),
|
||||
timeline_colors[(int)TimelineType::AlertCritical].name()));
|
||||
|
||||
@@ -75,7 +75,7 @@ Options:
|
||||
--qcam load qcamera
|
||||
--no-hw-decoder disable HW video decoding
|
||||
--no-vipc do not output video
|
||||
--all do output all messages including uiDebug, userFlag.
|
||||
--all do output all messages including uiDebug, userBookmark.
|
||||
this may causes issues when used along with UI
|
||||
|
||||
Arguments:
|
||||
|
||||
@@ -257,7 +257,7 @@ void ConsoleUI::updateTimeline() {
|
||||
if (entry.type == TimelineType::Engaged) {
|
||||
mvwchgat(win, 1, start_pos, end_pos - start_pos + 1, A_COLOR, Color::Engaged, NULL);
|
||||
mvwchgat(win, 2, start_pos, end_pos - start_pos + 1, A_COLOR, Color::Engaged, NULL);
|
||||
} else if (entry.type == TimelineType::UserFlag) {
|
||||
} else if (entry.type == TimelineType::UserBookmark) {
|
||||
mvwchgat(win, 3, start_pos, end_pos - start_pos + 1, ACS_S3, Color::Cyan, NULL);
|
||||
} else {
|
||||
auto color_id = Color::Green;
|
||||
@@ -329,7 +329,7 @@ void ConsoleUI::handleKey(char c) {
|
||||
} else if (c == 'd') {
|
||||
replay->seekToFlag(FindFlag::nextDisEngagement);
|
||||
} else if (c == 't') {
|
||||
replay->seekToFlag(FindFlag::nextUserFlag);
|
||||
replay->seekToFlag(FindFlag::nextUserBookmark);
|
||||
} else if (c == 'i') {
|
||||
replay->seekToFlag(FindFlag::nextInfo);
|
||||
} else if (c == 'w') {
|
||||
|
||||
@@ -30,7 +30,7 @@ Options:
|
||||
--qcam Load qcamera
|
||||
--no-hw-decoder Disable HW video decoding
|
||||
--no-vipc Do not output video
|
||||
--all Output all messages including uiDebug, userFlag
|
||||
--all Output all messages including uiDebug, userBookmark
|
||||
-h, --help Show this help message
|
||||
)";
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ Replay::Replay(const std::string &route, std::vector<std::string> allow, std::ve
|
||||
std::signal(SIGUSR1, interrupt_sleep_handler);
|
||||
|
||||
if (!(flags_ & REPLAY_FLAG_ALL_SERVICES)) {
|
||||
block.insert(block.end(), {"uiDebug", "userFlag"});
|
||||
block.insert(block.end(), {"uiDebug", "userBookmark"});
|
||||
}
|
||||
setupServices(allow, block);
|
||||
setupSegmentManager(!allow.empty() || !block.empty());
|
||||
|
||||
@@ -26,7 +26,7 @@ std::optional<uint64_t> Timeline::find(double cur_ts, FindFlag flag) const {
|
||||
return entry.end_time;
|
||||
}
|
||||
} else if (entry.start_time > cur_ts) {
|
||||
if ((flag == FindFlag::nextUserFlag && entry.type == TimelineType::UserFlag) ||
|
||||
if ((flag == FindFlag::nextUserBookmark && entry.type == TimelineType::UserBookmark) ||
|
||||
(flag == FindFlag::nextInfo && entry.type == TimelineType::AlertInfo) ||
|
||||
(flag == FindFlag::nextWarning && entry.type == TimelineType::AlertWarning) ||
|
||||
(flag == FindFlag::nextCritical && entry.type == TimelineType::AlertCritical)) {
|
||||
@@ -66,8 +66,8 @@ void Timeline::buildTimeline(const Route &route, uint64_t route_start_ts, bool l
|
||||
auto cs = reader.getRoot<cereal::Event>().getSelfdriveState();
|
||||
updateEngagementStatus(cs, current_engaged_idx, seconds);
|
||||
updateAlertStatus(cs, current_alert_idx, seconds);
|
||||
} else if (e.which == cereal::Event::Which::USER_FLAG) {
|
||||
staging_entries_.emplace_back(Entry{seconds, seconds, TimelineType::UserFlag});
|
||||
} else if (e.which == cereal::Event::Which::USER_BOOKMARK) {
|
||||
staging_entries_.emplace_back(Entry{seconds, seconds, TimelineType::UserBookmark});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
|
||||
#include "tools/replay/route.h"
|
||||
|
||||
enum class TimelineType { None, Engaged, AlertInfo, AlertWarning, AlertCritical, UserFlag };
|
||||
enum class FindFlag { nextEngagement, nextDisEngagement, nextUserFlag, nextInfo, nextWarning, nextCritical };
|
||||
enum class TimelineType { None, Engaged, AlertInfo, AlertWarning, AlertCritical, UserBookmark };
|
||||
enum class FindFlag { nextEngagement, nextDisEngagement, nextUserBookmark, nextInfo, nextWarning, nextCritical };
|
||||
|
||||
class Timeline {
|
||||
public:
|
||||
|
||||
Reference in New Issue
Block a user