94 lines
4.1 KiB
C++
94 lines
4.1 KiB
C++
#include "frogpilot/ui/frogpilot_ui.h"
|
|
|
|
static void update_state(FrogPilotUIState *fs) {
|
|
FrogPilotUIScene &frogpilot_scene = fs->frogpilot_scene;
|
|
|
|
SubMaster &sm = *(fs->sm);
|
|
sm.update(0);
|
|
|
|
if (sm.updated("carState")) {
|
|
const cereal::CarState::Reader &carState = sm["carState"].getCarState();
|
|
frogpilot_scene.parked = carState.getGearShifter() == cereal::CarState::GearShifter::PARK;
|
|
frogpilot_scene.reverse = carState.getGearShifter() == cereal::CarState::GearShifter::REVERSE;
|
|
frogpilot_scene.standstill = carState.getStandstill() && !frogpilot_scene.reverse;
|
|
}
|
|
if (sm.updated("controlsState")) {
|
|
const cereal::ControlsState::Reader &controlsState = sm["controlsState"].getControlsState();
|
|
frogpilot_scene.enabled = controlsState.getEnabled();
|
|
}
|
|
if (sm.updated("deviceState")) {
|
|
const cereal::DeviceState::Reader &deviceState = sm["deviceState"].getDeviceState();
|
|
frogpilot_scene.online = deviceState.getNetworkType() != cereal::DeviceState::NetworkType::NONE;
|
|
}
|
|
if (sm.updated("frogpilotCarState")) {
|
|
const cereal::FrogPilotCarState::Reader &frogpilotCarState = sm["frogpilotCarState"].getFrogpilotCarState();
|
|
frogpilot_scene.always_on_lateral_active = !frogpilot_scene.enabled && frogpilotCarState.getAlwaysOnLateralEnabled();
|
|
frogpilot_scene.traffic_mode_enabled = frogpilotCarState.getTrafficModeEnabled();
|
|
}
|
|
if (sm.updated("frogpilotPlan")) {
|
|
const cereal::FrogPilotPlan::Reader &frogpilotPlan = sm["frogpilotPlan"].getFrogpilotPlan();
|
|
frogpilot_scene.lane_width_left = frogpilotPlan.getLaneWidthLeft();
|
|
frogpilot_scene.lane_width_right = frogpilotPlan.getLaneWidthRight();
|
|
if (frogpilotPlan.getThemeUpdated()) {
|
|
frogpilot_scene.frogpilot_toggles = QJsonDocument::fromJson(fs->params_memory.get("FrogPilotToggles").c_str()).object();
|
|
|
|
update_theme(fs);
|
|
|
|
emit fs->themeUpdated();
|
|
|
|
fs->params_memory.remove("UseActiveTheme");
|
|
}
|
|
if (frogpilotPlan.getTogglesUpdated()) {
|
|
frogpilot_scene.frogpilot_toggles = QJsonDocument::fromJson(QByteArray::fromStdString(fs->params_memory.get("FrogPilotToggles"))).object();
|
|
}
|
|
}
|
|
}
|
|
|
|
void update_theme(FrogPilotUIState *fs) {
|
|
FrogPilotUIScene &frogpilot_scene = fs->frogpilot_scene;
|
|
|
|
frogpilot_scene.use_stock_colors = frogpilot_scene.frogpilot_toggles.value("color_scheme").toString() == "stock";
|
|
|
|
if (!frogpilot_scene.use_stock_colors) {
|
|
frogpilot_scene.use_stock_colors |= !loadThemeColors("", true).isValid();
|
|
|
|
frogpilot_scene.lane_lines_color = loadThemeColors("LaneLines");
|
|
frogpilot_scene.lead_marker_color = loadThemeColors("LeadMarker");
|
|
frogpilot_scene.path_color = loadThemeColors("Path");
|
|
frogpilot_scene.path_edges_color = loadThemeColors("PathEdge");
|
|
frogpilot_scene.sidebar_color1 = loadThemeColors("Sidebar1");
|
|
frogpilot_scene.sidebar_color2 = loadThemeColors("Sidebar2");
|
|
frogpilot_scene.sidebar_color3 = loadThemeColors("Sidebar3");
|
|
}
|
|
}
|
|
|
|
FrogPilotUIState::FrogPilotUIState(QObject *parent) : QObject(parent) {
|
|
sm = std::make_unique<SubMaster, const std::initializer_list<const char *>>({
|
|
"carControl", "carState", "controlsState", "deviceState", "frogpilotCarState", "frogpilotControlsState",
|
|
"frogpilotDeviceState", "frogpilotNavigation", "frogpilotPlan", "frogpilotRadarState", "liveDelay",
|
|
"liveParameters", "liveTorqueParameters", "liveTracks", "navInstruction"
|
|
});
|
|
|
|
wifi = new WifiManager(this);
|
|
|
|
frogpilot_scene.frogpilot_toggles = QJsonDocument::fromJson(QByteArray::fromStdString(params_memory.get("FrogPilotToggles", true))).object();
|
|
|
|
if (frogpilot_scene.frogpilot_toggles.value("tethering_config").toInt() == 1) {
|
|
wifi->setTetheringEnabled(true);
|
|
}
|
|
|
|
update_theme(this);
|
|
}
|
|
|
|
FrogPilotUIState *frogpilotUIState() {
|
|
static FrogPilotUIState frogpilot_ui_state;
|
|
return &frogpilot_ui_state;
|
|
}
|
|
|
|
void FrogPilotUIState::update() {
|
|
update_state(this);
|
|
|
|
frogpilot_scene.conditional_status = frogpilot_scene.enabled ? params_memory.getInt("CEStatus") : 0;
|
|
frogpilot_scene.driver_camera_timer = frogpilot_scene.reverse && frogpilot_toggles.value("driver_camera_in_reverse").toBool() ? frogpilot_scene.driver_camera_timer + 1 : 0;
|
|
}
|