diff --git a/cereal/car.capnp b/cereal/car.capnp index e005e4d..2f1c8a5 100644 --- a/cereal/car.capnp +++ b/cereal/car.capnp @@ -120,6 +120,7 @@ struct CarEvent @0x9b1657f34caf3ad3 { # FrogPilot events frogSteerSaturated @122; greenLight @123; + holidayActive @124; radarCanErrorDEPRECATED @15; communityFeatureDisallowedDEPRECATED @62; diff --git a/common/params.cc b/common/params.cc index 2cf559f..559b5bc 100644 --- a/common/params.cc +++ b/common/params.cc @@ -239,6 +239,7 @@ std::unordered_map keys = { {"CEStopLights", PERSISTENT}, {"CEStopLightsLead", PERSISTENT}, {"ConditionalExperimental", PERSISTENT}, + {"CurrentHolidayTheme", PERSISTENT}, {"CustomAlerts", PERSISTENT}, {"CustomColors", PERSISTENT}, {"CustomIcons", PERSISTENT}, @@ -276,6 +277,7 @@ std::unordered_map keys = { {"HideSpeed", PERSISTENT}, {"HideSpeedUI", PERSISTENT}, {"HigherBitrate", PERSISTENT}, + {"HolidayThemes", PERSISTENT}, {"LaneLinesWidth", PERSISTENT}, {"LateralTune", PERSISTENT}, {"LeadInfo", PERSISTENT}, diff --git a/selfdrive/controls/controlsd.py b/selfdrive/controls/controlsd.py old mode 100755 new mode 100644 index cfb7cfe..725c388 --- a/selfdrive/controls/controlsd.py +++ b/selfdrive/controls/controlsd.py @@ -178,6 +178,7 @@ class Controls: self.frogpilot_variables = SimpleNamespace() self.driving_gear = False + self.holiday_theme_alerted = False self.previously_enabled = False self.stopped_for_light_previously = False @@ -320,6 +321,11 @@ class Controls: frogpilot_plan = self.sm['frogpilotPlan'] + # Show holiday related event to indicate which holiday is active + if self.sm.frame >= 1000 and self.holiday_themes and self.params_memory.get_int("CurrentHolidayTheme") != 0 and not self.holiday_theme_alerted: + self.events.add(EventName.holidayActive) + self.holiday_theme_alerted = True + # Add joystick event, static on cars, dynamic on nonCars if self.joystick_mode: self.events.add(EventName.joystickDebug) @@ -1041,6 +1047,7 @@ class Controls: custom_sounds = self.params.get_int("CustomSounds") if custom_theme else 0 frog_sounds = custom_sounds == 1 self.goat_scream = frog_sounds and self.params.get_bool("GoatScream") + self.holiday_themes = custom_theme and self.params.get_bool("HolidayThemes") experimental_mode_activation = self.params.get_bool("ExperimentalModeActivation") self.frogpilot_variables.experimental_mode_via_distance = experimental_mode_activation and self.params.get_bool("ExperimentalModeViaDistance") diff --git a/selfdrive/controls/lib/events.py b/selfdrive/controls/lib/events.py index 599998b..6dd2fe7 100755 --- a/selfdrive/controls/lib/events.py +++ b/selfdrive/controls/lib/events.py @@ -11,6 +11,8 @@ from openpilot.common.realtime import DT_CTRL from openpilot.selfdrive.locationd.calibrationd import MIN_SPEED_FILTER from openpilot.system.version import get_short_branch +params_memory = Params("/dev/shm/params") + AlertSize = log.ControlsState.AlertSize AlertStatus = log.ControlsState.AlertStatus VisualAlert = car.CarControl.HUDControl.VisualAlert @@ -333,6 +335,29 @@ def joystick_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, # FrogPilot alerts +def holiday_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int) -> Alert: + holiday_messages = { + 1: ("Happy April Fool's Day! ๐Ÿคก", "aprilFoolsAlert"), + 2: ("Merry Christmas! ๐ŸŽ„", "christmasAlert"), + 3: ("ยกFeliz Cinco de Mayo! ๐ŸŒฎ", "cincoDeMayoAlert"), + 4: ("Happy Easter! ๐Ÿฐ", "easterAlert"), + 5: ("Happy Fourth of July! ๐ŸŽ†", "fourthOfJulyAlert"), + 6: ("Happy Halloween! ๐ŸŽƒ", "halloweenAlert"), + 7: ("Happy New Year! ๐ŸŽ‰", "newYearsDayAlert"), + 8: ("Happy St. Patrick's Day! ๐Ÿ€", "stPatricksDayAlert"), + 9: ("Happy Thanksgiving! ๐Ÿฆƒ", "thanksgivingAlert"), + 10: ("Happy Valentine's Day! โค๏ธ", "valentinesDayAlert"), + 11: ("Happy World Frog Day! ๐Ÿธ", "worldFrogDayAlert"), + } + + theme_id = params_memory.get_int("CurrentHolidayTheme") + message, alert_type = holiday_messages.get(theme_id, ("", "")) + + return Alert( + message, + "", + AlertStatus.normal, AlertSize.small, + Priority.LOWEST, VisualAlert.none, AudibleAlert.none, 5.) EVENTS: Dict[int, Dict[str, Union[Alert, AlertCallbackType]]] = { # ********** events with no alerts ********** @@ -974,6 +999,9 @@ EVENTS: Dict[int, Dict[str, Union[Alert, AlertCallbackType]]] = { Priority.MID, VisualAlert.none, AudibleAlert.prompt, 3.), }, + EventName.holidayActive: { + ET.PERMANENT: holiday_alert, + }, } diff --git a/selfdrive/frogpilot/assets/holiday_themes/april_fools/images/button_flag.png b/selfdrive/frogpilot/assets/holiday_themes/april_fools/images/button_flag.png new file mode 100644 index 0000000..27745b6 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/april_fools/images/button_flag.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/april_fools/images/button_home.png b/selfdrive/frogpilot/assets/holiday_themes/april_fools/images/button_home.png new file mode 100644 index 0000000..22d8163 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/april_fools/images/button_home.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/april_fools/images/button_settings.png b/selfdrive/frogpilot/assets/holiday_themes/april_fools/images/button_settings.png new file mode 100644 index 0000000..65ddf3f Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/april_fools/images/button_settings.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/april_fools/sounds/disengage.wav b/selfdrive/frogpilot/assets/holiday_themes/april_fools/sounds/disengage.wav new file mode 100644 index 0000000..362bb11 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/april_fools/sounds/disengage.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/april_fools/sounds/engage.wav b/selfdrive/frogpilot/assets/holiday_themes/april_fools/sounds/engage.wav new file mode 100644 index 0000000..f40e839 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/april_fools/sounds/engage.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/april_fools/sounds/prompt.wav b/selfdrive/frogpilot/assets/holiday_themes/april_fools/sounds/prompt.wav new file mode 100644 index 0000000..1ae7705 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/april_fools/sounds/prompt.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/april_fools/sounds/prompt_distracted.wav b/selfdrive/frogpilot/assets/holiday_themes/april_fools/sounds/prompt_distracted.wav new file mode 100644 index 0000000..c3d4475 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/april_fools/sounds/prompt_distracted.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/april_fools/sounds/refuse.wav b/selfdrive/frogpilot/assets/holiday_themes/april_fools/sounds/refuse.wav new file mode 100644 index 0000000..0e80f7d Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/april_fools/sounds/refuse.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/april_fools/sounds/warning_immediate.wav b/selfdrive/frogpilot/assets/holiday_themes/april_fools/sounds/warning_immediate.wav new file mode 100644 index 0000000..b1815a9 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/april_fools/sounds/warning_immediate.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/april_fools/sounds/warning_soft.wav b/selfdrive/frogpilot/assets/holiday_themes/april_fools/sounds/warning_soft.wav new file mode 100644 index 0000000..4b4ce41 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/april_fools/sounds/warning_soft.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/christmas/images/button_flag.png b/selfdrive/frogpilot/assets/holiday_themes/christmas/images/button_flag.png new file mode 100644 index 0000000..627af8a Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/christmas/images/button_flag.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/christmas/images/button_home.png b/selfdrive/frogpilot/assets/holiday_themes/christmas/images/button_home.png new file mode 100644 index 0000000..627af8a Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/christmas/images/button_home.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/christmas/images/button_settings.png b/selfdrive/frogpilot/assets/holiday_themes/christmas/images/button_settings.png new file mode 100644 index 0000000..5592759 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/christmas/images/button_settings.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/christmas/images/turn_signal_1.png b/selfdrive/frogpilot/assets/holiday_themes/christmas/images/turn_signal_1.png new file mode 100644 index 0000000..43e0b44 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/christmas/images/turn_signal_1.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/christmas/images/turn_signal_1_red.png b/selfdrive/frogpilot/assets/holiday_themes/christmas/images/turn_signal_1_red.png new file mode 100644 index 0000000..7c10245 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/christmas/images/turn_signal_1_red.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/christmas/images/turn_signal_2.png b/selfdrive/frogpilot/assets/holiday_themes/christmas/images/turn_signal_2.png new file mode 100644 index 0000000..e8e1479 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/christmas/images/turn_signal_2.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/christmas/images/turn_signal_3.png b/selfdrive/frogpilot/assets/holiday_themes/christmas/images/turn_signal_3.png new file mode 100644 index 0000000..b59b003 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/christmas/images/turn_signal_3.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/christmas/images/turn_signal_4.png b/selfdrive/frogpilot/assets/holiday_themes/christmas/images/turn_signal_4.png new file mode 100644 index 0000000..c3c1d20 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/christmas/images/turn_signal_4.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/christmas/sounds/disengage.wav b/selfdrive/frogpilot/assets/holiday_themes/christmas/sounds/disengage.wav new file mode 100644 index 0000000..ba583c4 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/christmas/sounds/disengage.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/christmas/sounds/engage.wav b/selfdrive/frogpilot/assets/holiday_themes/christmas/sounds/engage.wav new file mode 100644 index 0000000..41e9b2d Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/christmas/sounds/engage.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/christmas/sounds/prompt.wav b/selfdrive/frogpilot/assets/holiday_themes/christmas/sounds/prompt.wav new file mode 100644 index 0000000..1ae7705 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/christmas/sounds/prompt.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/christmas/sounds/prompt_distracted.wav b/selfdrive/frogpilot/assets/holiday_themes/christmas/sounds/prompt_distracted.wav new file mode 100644 index 0000000..c3d4475 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/christmas/sounds/prompt_distracted.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/christmas/sounds/refuse.wav b/selfdrive/frogpilot/assets/holiday_themes/christmas/sounds/refuse.wav new file mode 100644 index 0000000..0e80f7d Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/christmas/sounds/refuse.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/christmas/sounds/warning_immediate.wav b/selfdrive/frogpilot/assets/holiday_themes/christmas/sounds/warning_immediate.wav new file mode 100644 index 0000000..b1815a9 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/christmas/sounds/warning_immediate.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/christmas/sounds/warning_soft.wav b/selfdrive/frogpilot/assets/holiday_themes/christmas/sounds/warning_soft.wav new file mode 100644 index 0000000..261c7e1 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/christmas/sounds/warning_soft.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/images/button_flag.png b/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/images/button_flag.png new file mode 100644 index 0000000..627af8a Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/images/button_flag.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/images/button_home.png b/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/images/button_home.png new file mode 100644 index 0000000..627af8a Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/images/button_home.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/images/button_settings.png b/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/images/button_settings.png new file mode 100644 index 0000000..5592759 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/images/button_settings.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/images/turn_signal_1.png b/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/images/turn_signal_1.png new file mode 100644 index 0000000..43e0b44 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/images/turn_signal_1.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/images/turn_signal_1_red.png b/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/images/turn_signal_1_red.png new file mode 100644 index 0000000..7c10245 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/images/turn_signal_1_red.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/images/turn_signal_2.png b/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/images/turn_signal_2.png new file mode 100644 index 0000000..e8e1479 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/images/turn_signal_2.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/images/turn_signal_3.png b/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/images/turn_signal_3.png new file mode 100644 index 0000000..b59b003 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/images/turn_signal_3.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/images/turn_signal_4.png b/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/images/turn_signal_4.png new file mode 100644 index 0000000..c3c1d20 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/images/turn_signal_4.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/sounds/disengage.wav b/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/sounds/disengage.wav new file mode 100644 index 0000000..ba583c4 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/sounds/disengage.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/sounds/engage.wav b/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/sounds/engage.wav new file mode 100644 index 0000000..41e9b2d Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/sounds/engage.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/sounds/prompt.wav b/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/sounds/prompt.wav new file mode 100644 index 0000000..1ae7705 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/sounds/prompt.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/sounds/prompt_distracted.wav b/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/sounds/prompt_distracted.wav new file mode 100644 index 0000000..c3d4475 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/sounds/prompt_distracted.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/sounds/refuse.wav b/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/sounds/refuse.wav new file mode 100644 index 0000000..0e80f7d Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/sounds/refuse.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/sounds/warning_immediate.wav b/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/sounds/warning_immediate.wav new file mode 100644 index 0000000..b1815a9 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/sounds/warning_immediate.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/sounds/warning_soft.wav b/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/sounds/warning_soft.wav new file mode 100644 index 0000000..261c7e1 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/cinco_de_mayo/sounds/warning_soft.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/easter/images/button_flag.png b/selfdrive/frogpilot/assets/holiday_themes/easter/images/button_flag.png new file mode 100644 index 0000000..6f8b178 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/easter/images/button_flag.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/easter/images/button_home.png b/selfdrive/frogpilot/assets/holiday_themes/easter/images/button_home.png new file mode 100644 index 0000000..6f8b178 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/easter/images/button_home.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/easter/images/button_settings.png b/selfdrive/frogpilot/assets/holiday_themes/easter/images/button_settings.png new file mode 100644 index 0000000..9a74f94 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/easter/images/button_settings.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/easter/images/turn_signal_1.png b/selfdrive/frogpilot/assets/holiday_themes/easter/images/turn_signal_1.png new file mode 100644 index 0000000..ea18185 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/easter/images/turn_signal_1.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/easter/images/turn_signal_1_red.png b/selfdrive/frogpilot/assets/holiday_themes/easter/images/turn_signal_1_red.png new file mode 100644 index 0000000..748ea30 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/easter/images/turn_signal_1_red.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/easter/images/turn_signal_2.png b/selfdrive/frogpilot/assets/holiday_themes/easter/images/turn_signal_2.png new file mode 100644 index 0000000..4331e5f Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/easter/images/turn_signal_2.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/easter/images/turn_signal_3.png b/selfdrive/frogpilot/assets/holiday_themes/easter/images/turn_signal_3.png new file mode 100644 index 0000000..1a7484f Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/easter/images/turn_signal_3.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/easter/images/turn_signal_4.png b/selfdrive/frogpilot/assets/holiday_themes/easter/images/turn_signal_4.png new file mode 100644 index 0000000..7514f2f Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/easter/images/turn_signal_4.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/easter/sounds/disengage.wav b/selfdrive/frogpilot/assets/holiday_themes/easter/sounds/disengage.wav new file mode 100644 index 0000000..f56a0f8 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/easter/sounds/disengage.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/easter/sounds/engage.wav b/selfdrive/frogpilot/assets/holiday_themes/easter/sounds/engage.wav new file mode 100644 index 0000000..a8dd79d Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/easter/sounds/engage.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/easter/sounds/prompt.wav b/selfdrive/frogpilot/assets/holiday_themes/easter/sounds/prompt.wav new file mode 100644 index 0000000..1ae7705 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/easter/sounds/prompt.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/easter/sounds/prompt_distracted.wav b/selfdrive/frogpilot/assets/holiday_themes/easter/sounds/prompt_distracted.wav new file mode 100644 index 0000000..c3d4475 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/easter/sounds/prompt_distracted.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/easter/sounds/refuse.wav b/selfdrive/frogpilot/assets/holiday_themes/easter/sounds/refuse.wav new file mode 100644 index 0000000..0e80f7d Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/easter/sounds/refuse.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/easter/sounds/warning_immediate.wav b/selfdrive/frogpilot/assets/holiday_themes/easter/sounds/warning_immediate.wav new file mode 100644 index 0000000..b1815a9 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/easter/sounds/warning_immediate.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/easter/sounds/warning_soft.wav b/selfdrive/frogpilot/assets/holiday_themes/easter/sounds/warning_soft.wav new file mode 100644 index 0000000..261c7e1 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/easter/sounds/warning_soft.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/images/button_flag.png b/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/images/button_flag.png new file mode 100644 index 0000000..627af8a Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/images/button_flag.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/images/button_home.png b/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/images/button_home.png new file mode 100644 index 0000000..627af8a Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/images/button_home.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/images/button_settings.png b/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/images/button_settings.png new file mode 100644 index 0000000..5592759 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/images/button_settings.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/images/turn_signal_1.png b/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/images/turn_signal_1.png new file mode 100644 index 0000000..43e0b44 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/images/turn_signal_1.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/images/turn_signal_1_red.png b/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/images/turn_signal_1_red.png new file mode 100644 index 0000000..7c10245 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/images/turn_signal_1_red.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/images/turn_signal_2.png b/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/images/turn_signal_2.png new file mode 100644 index 0000000..e8e1479 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/images/turn_signal_2.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/images/turn_signal_3.png b/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/images/turn_signal_3.png new file mode 100644 index 0000000..b59b003 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/images/turn_signal_3.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/images/turn_signal_4.png b/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/images/turn_signal_4.png new file mode 100644 index 0000000..c3c1d20 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/images/turn_signal_4.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/sounds/disengage.wav b/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/sounds/disengage.wav new file mode 100644 index 0000000..ba583c4 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/sounds/disengage.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/sounds/engage.wav b/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/sounds/engage.wav new file mode 100644 index 0000000..41e9b2d Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/sounds/engage.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/sounds/prompt.wav b/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/sounds/prompt.wav new file mode 100644 index 0000000..1ae7705 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/sounds/prompt.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/sounds/prompt_distracted.wav b/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/sounds/prompt_distracted.wav new file mode 100644 index 0000000..c3d4475 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/sounds/prompt_distracted.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/sounds/refuse.wav b/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/sounds/refuse.wav new file mode 100644 index 0000000..0e80f7d Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/sounds/refuse.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/sounds/warning_immediate.wav b/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/sounds/warning_immediate.wav new file mode 100644 index 0000000..b1815a9 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/sounds/warning_immediate.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/sounds/warning_soft.wav b/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/sounds/warning_soft.wav new file mode 100644 index 0000000..261c7e1 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/fourth_of_july/sounds/warning_soft.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/halloween/images/button_flag.png b/selfdrive/frogpilot/assets/holiday_themes/halloween/images/button_flag.png new file mode 100644 index 0000000..627af8a Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/halloween/images/button_flag.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/halloween/images/button_home.png b/selfdrive/frogpilot/assets/holiday_themes/halloween/images/button_home.png new file mode 100644 index 0000000..627af8a Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/halloween/images/button_home.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/halloween/images/button_settings.png b/selfdrive/frogpilot/assets/holiday_themes/halloween/images/button_settings.png new file mode 100644 index 0000000..5592759 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/halloween/images/button_settings.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/halloween/images/turn_signal_1.png b/selfdrive/frogpilot/assets/holiday_themes/halloween/images/turn_signal_1.png new file mode 100644 index 0000000..43e0b44 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/halloween/images/turn_signal_1.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/halloween/images/turn_signal_1_red.png b/selfdrive/frogpilot/assets/holiday_themes/halloween/images/turn_signal_1_red.png new file mode 100644 index 0000000..7c10245 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/halloween/images/turn_signal_1_red.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/halloween/images/turn_signal_2.png b/selfdrive/frogpilot/assets/holiday_themes/halloween/images/turn_signal_2.png new file mode 100644 index 0000000..e8e1479 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/halloween/images/turn_signal_2.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/halloween/images/turn_signal_3.png b/selfdrive/frogpilot/assets/holiday_themes/halloween/images/turn_signal_3.png new file mode 100644 index 0000000..b59b003 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/halloween/images/turn_signal_3.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/halloween/images/turn_signal_4.png b/selfdrive/frogpilot/assets/holiday_themes/halloween/images/turn_signal_4.png new file mode 100644 index 0000000..c3c1d20 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/halloween/images/turn_signal_4.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/halloween/sounds/disengage.wav b/selfdrive/frogpilot/assets/holiday_themes/halloween/sounds/disengage.wav new file mode 100644 index 0000000..ba583c4 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/halloween/sounds/disengage.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/halloween/sounds/engage.wav b/selfdrive/frogpilot/assets/holiday_themes/halloween/sounds/engage.wav new file mode 100644 index 0000000..41e9b2d Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/halloween/sounds/engage.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/halloween/sounds/prompt.wav b/selfdrive/frogpilot/assets/holiday_themes/halloween/sounds/prompt.wav new file mode 100644 index 0000000..1ae7705 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/halloween/sounds/prompt.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/halloween/sounds/prompt_distracted.wav b/selfdrive/frogpilot/assets/holiday_themes/halloween/sounds/prompt_distracted.wav new file mode 100644 index 0000000..c3d4475 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/halloween/sounds/prompt_distracted.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/halloween/sounds/refuse.wav b/selfdrive/frogpilot/assets/holiday_themes/halloween/sounds/refuse.wav new file mode 100644 index 0000000..0e80f7d Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/halloween/sounds/refuse.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/halloween/sounds/warning_immediate.wav b/selfdrive/frogpilot/assets/holiday_themes/halloween/sounds/warning_immediate.wav new file mode 100644 index 0000000..b1815a9 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/halloween/sounds/warning_immediate.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/halloween/sounds/warning_soft.wav b/selfdrive/frogpilot/assets/holiday_themes/halloween/sounds/warning_soft.wav new file mode 100644 index 0000000..261c7e1 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/halloween/sounds/warning_soft.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/new_years_day/images/button_flag.png b/selfdrive/frogpilot/assets/holiday_themes/new_years_day/images/button_flag.png new file mode 100644 index 0000000..627af8a Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/new_years_day/images/button_flag.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/new_years_day/images/button_home.png b/selfdrive/frogpilot/assets/holiday_themes/new_years_day/images/button_home.png new file mode 100644 index 0000000..627af8a Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/new_years_day/images/button_home.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/new_years_day/images/button_settings.png b/selfdrive/frogpilot/assets/holiday_themes/new_years_day/images/button_settings.png new file mode 100644 index 0000000..5592759 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/new_years_day/images/button_settings.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/new_years_day/images/turn_signal_1.png b/selfdrive/frogpilot/assets/holiday_themes/new_years_day/images/turn_signal_1.png new file mode 100644 index 0000000..43e0b44 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/new_years_day/images/turn_signal_1.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/new_years_day/images/turn_signal_1_red.png b/selfdrive/frogpilot/assets/holiday_themes/new_years_day/images/turn_signal_1_red.png new file mode 100644 index 0000000..7c10245 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/new_years_day/images/turn_signal_1_red.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/new_years_day/images/turn_signal_2.png b/selfdrive/frogpilot/assets/holiday_themes/new_years_day/images/turn_signal_2.png new file mode 100644 index 0000000..e8e1479 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/new_years_day/images/turn_signal_2.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/new_years_day/images/turn_signal_3.png b/selfdrive/frogpilot/assets/holiday_themes/new_years_day/images/turn_signal_3.png new file mode 100644 index 0000000..b59b003 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/new_years_day/images/turn_signal_3.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/new_years_day/images/turn_signal_4.png b/selfdrive/frogpilot/assets/holiday_themes/new_years_day/images/turn_signal_4.png new file mode 100644 index 0000000..c3c1d20 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/new_years_day/images/turn_signal_4.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/new_years_day/sounds/disengage.wav b/selfdrive/frogpilot/assets/holiday_themes/new_years_day/sounds/disengage.wav new file mode 100644 index 0000000..ba583c4 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/new_years_day/sounds/disengage.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/new_years_day/sounds/engage.wav b/selfdrive/frogpilot/assets/holiday_themes/new_years_day/sounds/engage.wav new file mode 100644 index 0000000..41e9b2d Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/new_years_day/sounds/engage.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/new_years_day/sounds/prompt.wav b/selfdrive/frogpilot/assets/holiday_themes/new_years_day/sounds/prompt.wav new file mode 100644 index 0000000..1ae7705 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/new_years_day/sounds/prompt.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/new_years_day/sounds/prompt_distracted.wav b/selfdrive/frogpilot/assets/holiday_themes/new_years_day/sounds/prompt_distracted.wav new file mode 100644 index 0000000..c3d4475 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/new_years_day/sounds/prompt_distracted.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/new_years_day/sounds/refuse.wav b/selfdrive/frogpilot/assets/holiday_themes/new_years_day/sounds/refuse.wav new file mode 100644 index 0000000..0e80f7d Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/new_years_day/sounds/refuse.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/new_years_day/sounds/warning_immediate.wav b/selfdrive/frogpilot/assets/holiday_themes/new_years_day/sounds/warning_immediate.wav new file mode 100644 index 0000000..b1815a9 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/new_years_day/sounds/warning_immediate.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/new_years_day/sounds/warning_soft.wav b/selfdrive/frogpilot/assets/holiday_themes/new_years_day/sounds/warning_soft.wav new file mode 100644 index 0000000..261c7e1 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/new_years_day/sounds/warning_soft.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/st_patricks_day/images/button_flag.png b/selfdrive/frogpilot/assets/holiday_themes/st_patricks_day/images/button_flag.png new file mode 100644 index 0000000..ada686a Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/st_patricks_day/images/button_flag.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/st_patricks_day/images/button_home.png b/selfdrive/frogpilot/assets/holiday_themes/st_patricks_day/images/button_home.png new file mode 100644 index 0000000..ada686a Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/st_patricks_day/images/button_home.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/st_patricks_day/images/button_settings.png b/selfdrive/frogpilot/assets/holiday_themes/st_patricks_day/images/button_settings.png new file mode 100644 index 0000000..7148616 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/st_patricks_day/images/button_settings.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/st_patricks_day/sounds/disengage.wav b/selfdrive/frogpilot/assets/holiday_themes/st_patricks_day/sounds/disengage.wav new file mode 100644 index 0000000..6f95b6f Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/st_patricks_day/sounds/disengage.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/st_patricks_day/sounds/engage.wav b/selfdrive/frogpilot/assets/holiday_themes/st_patricks_day/sounds/engage.wav new file mode 100644 index 0000000..fc13a3a Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/st_patricks_day/sounds/engage.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/st_patricks_day/sounds/prompt.wav b/selfdrive/frogpilot/assets/holiday_themes/st_patricks_day/sounds/prompt.wav new file mode 100644 index 0000000..1ae7705 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/st_patricks_day/sounds/prompt.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/st_patricks_day/sounds/prompt_distracted.wav b/selfdrive/frogpilot/assets/holiday_themes/st_patricks_day/sounds/prompt_distracted.wav new file mode 100644 index 0000000..c3d4475 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/st_patricks_day/sounds/prompt_distracted.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/st_patricks_day/sounds/refuse.wav b/selfdrive/frogpilot/assets/holiday_themes/st_patricks_day/sounds/refuse.wav new file mode 100644 index 0000000..0e80f7d Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/st_patricks_day/sounds/refuse.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/st_patricks_day/sounds/warning_immediate.wav b/selfdrive/frogpilot/assets/holiday_themes/st_patricks_day/sounds/warning_immediate.wav new file mode 100644 index 0000000..b1815a9 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/st_patricks_day/sounds/warning_immediate.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/st_patricks_day/sounds/warning_soft.wav b/selfdrive/frogpilot/assets/holiday_themes/st_patricks_day/sounds/warning_soft.wav new file mode 100644 index 0000000..261c7e1 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/st_patricks_day/sounds/warning_soft.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/images/button_flag.png b/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/images/button_flag.png new file mode 100644 index 0000000..627af8a Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/images/button_flag.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/images/button_home.png b/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/images/button_home.png new file mode 100644 index 0000000..627af8a Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/images/button_home.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/images/button_settings.png b/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/images/button_settings.png new file mode 100644 index 0000000..5592759 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/images/button_settings.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/images/turn_signal_1.png b/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/images/turn_signal_1.png new file mode 100644 index 0000000..43e0b44 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/images/turn_signal_1.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/images/turn_signal_1_red.png b/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/images/turn_signal_1_red.png new file mode 100644 index 0000000..7c10245 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/images/turn_signal_1_red.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/images/turn_signal_2.png b/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/images/turn_signal_2.png new file mode 100644 index 0000000..e8e1479 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/images/turn_signal_2.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/images/turn_signal_3.png b/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/images/turn_signal_3.png new file mode 100644 index 0000000..b59b003 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/images/turn_signal_3.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/images/turn_signal_4.png b/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/images/turn_signal_4.png new file mode 100644 index 0000000..c3c1d20 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/images/turn_signal_4.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/sounds/disengage.wav b/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/sounds/disengage.wav new file mode 100644 index 0000000..ba583c4 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/sounds/disengage.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/sounds/engage.wav b/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/sounds/engage.wav new file mode 100644 index 0000000..41e9b2d Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/sounds/engage.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/sounds/prompt.wav b/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/sounds/prompt.wav new file mode 100644 index 0000000..1ae7705 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/sounds/prompt.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/sounds/prompt_distracted.wav b/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/sounds/prompt_distracted.wav new file mode 100644 index 0000000..c3d4475 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/sounds/prompt_distracted.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/sounds/refuse.wav b/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/sounds/refuse.wav new file mode 100644 index 0000000..0e80f7d Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/sounds/refuse.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/sounds/warning_immediate.wav b/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/sounds/warning_immediate.wav new file mode 100644 index 0000000..b1815a9 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/sounds/warning_immediate.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/sounds/warning_soft.wav b/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/sounds/warning_soft.wav new file mode 100644 index 0000000..261c7e1 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/thanksgiving/sounds/warning_soft.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/valentines_day/images/button_flag.png b/selfdrive/frogpilot/assets/holiday_themes/valentines_day/images/button_flag.png new file mode 100644 index 0000000..627af8a Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/valentines_day/images/button_flag.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/valentines_day/images/button_home.png b/selfdrive/frogpilot/assets/holiday_themes/valentines_day/images/button_home.png new file mode 100644 index 0000000..627af8a Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/valentines_day/images/button_home.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/valentines_day/images/button_settings.png b/selfdrive/frogpilot/assets/holiday_themes/valentines_day/images/button_settings.png new file mode 100644 index 0000000..5592759 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/valentines_day/images/button_settings.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/valentines_day/images/turn_signal_1.png b/selfdrive/frogpilot/assets/holiday_themes/valentines_day/images/turn_signal_1.png new file mode 100644 index 0000000..43e0b44 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/valentines_day/images/turn_signal_1.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/valentines_day/images/turn_signal_1_red.png b/selfdrive/frogpilot/assets/holiday_themes/valentines_day/images/turn_signal_1_red.png new file mode 100644 index 0000000..7c10245 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/valentines_day/images/turn_signal_1_red.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/valentines_day/images/turn_signal_2.png b/selfdrive/frogpilot/assets/holiday_themes/valentines_day/images/turn_signal_2.png new file mode 100644 index 0000000..e8e1479 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/valentines_day/images/turn_signal_2.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/valentines_day/images/turn_signal_3.png b/selfdrive/frogpilot/assets/holiday_themes/valentines_day/images/turn_signal_3.png new file mode 100644 index 0000000..b59b003 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/valentines_day/images/turn_signal_3.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/valentines_day/images/turn_signal_4.png b/selfdrive/frogpilot/assets/holiday_themes/valentines_day/images/turn_signal_4.png new file mode 100644 index 0000000..c3c1d20 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/valentines_day/images/turn_signal_4.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/valentines_day/sounds/disengage.wav b/selfdrive/frogpilot/assets/holiday_themes/valentines_day/sounds/disengage.wav new file mode 100644 index 0000000..ba583c4 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/valentines_day/sounds/disengage.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/valentines_day/sounds/engage.wav b/selfdrive/frogpilot/assets/holiday_themes/valentines_day/sounds/engage.wav new file mode 100644 index 0000000..41e9b2d Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/valentines_day/sounds/engage.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/valentines_day/sounds/prompt.wav b/selfdrive/frogpilot/assets/holiday_themes/valentines_day/sounds/prompt.wav new file mode 100644 index 0000000..1ae7705 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/valentines_day/sounds/prompt.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/valentines_day/sounds/prompt_distracted.wav b/selfdrive/frogpilot/assets/holiday_themes/valentines_day/sounds/prompt_distracted.wav new file mode 100644 index 0000000..c3d4475 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/valentines_day/sounds/prompt_distracted.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/valentines_day/sounds/refuse.wav b/selfdrive/frogpilot/assets/holiday_themes/valentines_day/sounds/refuse.wav new file mode 100644 index 0000000..0e80f7d Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/valentines_day/sounds/refuse.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/valentines_day/sounds/warning_immediate.wav b/selfdrive/frogpilot/assets/holiday_themes/valentines_day/sounds/warning_immediate.wav new file mode 100644 index 0000000..b1815a9 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/valentines_day/sounds/warning_immediate.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/valentines_day/sounds/warning_soft.wav b/selfdrive/frogpilot/assets/holiday_themes/valentines_day/sounds/warning_soft.wav new file mode 100644 index 0000000..261c7e1 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/valentines_day/sounds/warning_soft.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/images/button_flag.png b/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/images/button_flag.png new file mode 100644 index 0000000..627af8a Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/images/button_flag.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/images/button_home.png b/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/images/button_home.png new file mode 100644 index 0000000..627af8a Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/images/button_home.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/images/button_settings.png b/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/images/button_settings.png new file mode 100644 index 0000000..5592759 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/images/button_settings.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/images/turn_signal_1.png b/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/images/turn_signal_1.png new file mode 100644 index 0000000..43e0b44 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/images/turn_signal_1.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/images/turn_signal_1_red.png b/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/images/turn_signal_1_red.png new file mode 100644 index 0000000..7c10245 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/images/turn_signal_1_red.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/images/turn_signal_2.png b/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/images/turn_signal_2.png new file mode 100644 index 0000000..e8e1479 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/images/turn_signal_2.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/images/turn_signal_3.png b/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/images/turn_signal_3.png new file mode 100644 index 0000000..b59b003 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/images/turn_signal_3.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/images/turn_signal_4.png b/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/images/turn_signal_4.png new file mode 100644 index 0000000..c3c1d20 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/images/turn_signal_4.png differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/sounds/disengage.wav b/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/sounds/disengage.wav new file mode 100644 index 0000000..d46dd9e Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/sounds/disengage.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/sounds/engage.wav b/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/sounds/engage.wav new file mode 100644 index 0000000..795aa53 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/sounds/engage.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/sounds/prompt.wav b/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/sounds/prompt.wav new file mode 100644 index 0000000..1ae7705 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/sounds/prompt.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/sounds/prompt_distracted.wav b/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/sounds/prompt_distracted.wav new file mode 100644 index 0000000..c3d4475 Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/sounds/prompt_distracted.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/sounds/refuse.wav b/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/sounds/refuse.wav new file mode 100644 index 0000000..0e80f7d Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/sounds/refuse.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/sounds/warning_immediate.wav b/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/sounds/warning_immediate.wav new file mode 100644 index 0000000..a8c778f Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/sounds/warning_immediate.wav differ diff --git a/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/sounds/warning_soft.wav b/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/sounds/warning_soft.wav new file mode 100644 index 0000000..e6f3c2c Binary files /dev/null and b/selfdrive/frogpilot/assets/holiday_themes/world_frog_day/sounds/warning_soft.wav differ diff --git a/selfdrive/frogpilot/functions/frogpilot_process.py b/selfdrive/frogpilot/functions/frogpilot_process.py new file mode 100644 index 0000000..ecea541 --- /dev/null +++ b/selfdrive/frogpilot/functions/frogpilot_process.py @@ -0,0 +1,107 @@ +import datetime +import time +import threading + +from openpilot.common.params import Params +from openpilot.common.realtime import Ratekeeper + +class FrogPilotProcess: + def __init__(self): + self.params_memory = Params("/dev/shm/params") + + self.previous_theme_id = 0 + + @staticmethod + def calculate_easter(year): + a = year % 19 + b = year // 100 + c = year % 100 + d = b // 4 + e = b % 4 + f = (b + 8) // 25 + g = (b - f + 1) // 3 + h = (19 * a + b - d - g + 15) % 30 + i = c // 4 + k = c % 4 + l = (32 + 2 * e + 2 * i - h - k) % 7 + m = (a + 11 * h + 22 * l) // 451 + month = (h + l - 7 * m + 114) // 31 + day = ((h + l - 7 * m + 114) % 31) + 1 + return datetime.datetime(year, month, day) + + @staticmethod + def calculate_thanksgiving(year): + fourth_thursday = 4 + november_first = datetime.datetime(year, 11, 1) + day_of_week = november_first.weekday() + thanksgiving = november_first + datetime.timedelta(days=((fourth_thursday - day_of_week) % 7) + 21) + return thanksgiving + + @staticmethod + def is_within_week_of(target_date, current_date): + start_of_week = target_date - datetime.timedelta(days=target_date.weekday()) + end_of_week = start_of_week + datetime.timedelta(days=6) + return start_of_week <= current_date <= end_of_week + + def check_date(self): + current_date = datetime.datetime.now() + year = current_date.year + + holidays = { + "april_fools": (datetime.datetime(year, 4, 1), 1), + "christmas_week": (datetime.datetime(year, 12, 25), 2), + "cinco_de_mayo": (datetime.datetime(year, 5, 5), 3), + "easter_week": (self.calculate_easter(year), 4), + "fourth_of_july": (datetime.datetime(year, 7, 4), 5), + "halloween_week": (datetime.datetime(year, 10, 31), 6), + "new_years": (datetime.datetime(year, 1, 1), 7), + "st_patricks": (datetime.datetime(year, 3, 17), 8), + "thanksgiving_week": (self.calculate_thanksgiving(year), 9), + "valentines": (datetime.datetime(year, 2, 14), 10), + "world_frog_day": (datetime.datetime(year, 3, 20), 11) + } + + for holiday, (date, theme_id) in holidays.items(): + if holiday.endswith("_week"): + if self.is_within_week_of(date, current_date): + self.params_memory.put_int("CurrentHolidayTheme", theme_id) + if theme_id != self.previous_theme_id: + threading.Thread(target=self.update_holiday_theme).start() + self.previous_theme_id = theme_id + return + + elif current_date.date() == date.date(): + self.params_memory.put_int("CurrentHolidayTheme", theme_id) + if theme_id != self.previous_theme_id: + threading.Thread(target=self.update_holiday_theme).start() + self.previous_theme_id = theme_id + return + + else: + self.params_memory.put_int("CurrentHolidayTheme", 0) + if self.previous_theme_id != 0: + threading.Thread(target=self.update_holiday_theme).start() + self.previous_theme_id = 0 + + def update_holiday_theme(self): + self.params_memory.put_bool("FrogPilotTogglesUpdated", True) + time.sleep(1) + self.params_memory.put_bool("FrogPilotTogglesUpdated", False) + + def frogpilot_process_thread(self): + rk = Ratekeeper(1.0) + + while True: + current_time = datetime.datetime.now() + + if current_time.second == 0: + self.check_date() + + rk.keep_time() + +def main(): + frogpilot_process = FrogPilotProcess() + frogpilot_process.frogpilot_process_thread() + +if __name__ == "__main__": + main() diff --git a/selfdrive/frogpilot/ui/visual_settings.cc b/selfdrive/frogpilot/ui/visual_settings.cc index 245a1fb..5de3f83 100644 --- a/selfdrive/frogpilot/ui/visual_settings.cc +++ b/selfdrive/frogpilot/ui/visual_settings.cc @@ -3,6 +3,7 @@ FrogPilotVisualsPanel::FrogPilotVisualsPanel(SettingsWindow *parent) : FrogPilotListWidget(parent) { const std::vector> visualToggles { {"CustomTheme", "Custom Themes", "Enable the ability to use custom themes.", "../frogpilot/assets/wheel_images/frog.png"}, + {"HolidayThemes", "Holiday Themes", "The openpilot theme changes according to the current/upcoming holiday. Minor holidays last a day, major holidays (Easter, Christmas, Halloween, etc.) last a week.", ""}, {"CustomColors", "Color Theme", "Switch out the standard openpilot color scheme with a custom color scheme.\n\nWant to submit your own color scheme? Post it in the 'feature-request' channel in the FrogPilot Discord!", ""}, {"CustomIcons", "Icon Pack", "Switch out the standard openpilot icons with a set of custom icons.\n\nWant to submit your own icon pack? Post it in the 'feature-request' channel in the FrogPilot Discord!", ""}, {"CustomSignals", "Turn Signals", "Add custom animations for your turn signals for a personal touch!\n\nWant to submit your own turn signal animation? Post it in the 'feature-request' channel in the FrogPilot Discord!", ""}, @@ -88,7 +89,7 @@ FrogPilotVisualsPanel::FrogPilotVisualsPanel(SettingsWindow *parent) : FrogPilot } }); toggle = customThemeToggle; - } else if (customThemeKeys.find(param) != customThemeKeys.end()) { + } else if (customThemeKeys.find(param) != customThemeKeys.end() && param != "HolidayThemes") { std::vector themeOptions{tr("Stock"), tr("Frog"), tr("Tesla"), tr("Stalin")}; FrogPilotButtonParamControl *themeSelection = new FrogPilotButtonParamControl(param, title, desc, icon, themeOptions); toggle = themeSelection; diff --git a/selfdrive/frogpilot/ui/visual_settings.h b/selfdrive/frogpilot/ui/visual_settings.h index d56ed63..41bfb2f 100644 --- a/selfdrive/frogpilot/ui/visual_settings.h +++ b/selfdrive/frogpilot/ui/visual_settings.h @@ -31,7 +31,7 @@ private: std::set alertVolumeControlKeys = {"EngageVolume", "DisengageVolume", "RefuseVolume", "PromptVolume", "PromptDistractedVolume", "WarningSoftVolume", "WarningImmediateVolume"}; std::set customAlertsKeys = {"GreenLightAlert"}; std::set customOnroadUIKeys = {"AccelerationPath", "AdjacentPath", "BlindSpotPath", "FPSCounter", "LeadInfo"}; - std::set customThemeKeys = {"CustomColors", "CustomIcons", "CustomSignals", "CustomSounds"}; + std::set customThemeKeys = {"HolidayThemes", "CustomColors", "CustomIcons", "CustomSignals", "CustomSounds"}; std::set modelUIKeys = {"DynamicPathWidth", "LaneLinesWidth", "PathEdgeWidth", "PathWidth", "RoadEdgesWidth", "UnlimitedLength"}; std::set qolKeys = {"DriveStats", "FullMap", "HideSpeed"}; diff --git a/selfdrive/manager/manager.py b/selfdrive/manager/manager.py index 29ecd65..3365b81 100644 --- a/selfdrive/manager/manager.py +++ b/selfdrive/manager/manager.py @@ -153,6 +153,7 @@ def manager_init() -> None: ("HideSpeedUI", "0"), ("HideUIElements", "0"), ("HigherBitrate", "0"), + ("HolidayThemes", "1"), ("LaneChangeTime", "0"), ("LaneDetection", "1"), ("LaneDetectionWidth", "60"), diff --git a/selfdrive/manager/process_config.py b/selfdrive/manager/process_config.py index 3829bfa..9922329 100644 --- a/selfdrive/manager/process_config.py +++ b/selfdrive/manager/process_config.py @@ -99,6 +99,7 @@ procs = [ # FrogPilot processes PythonProcess("fleet_manager", "selfdrive.frogpilot.fleetmanager.fleet_manager", always_run), + PythonProcess("frogpilot_process", "selfdrive.frogpilot.functions.frogpilot_process", always_run), ] managed_processes = {p.name: p for p in procs} diff --git a/selfdrive/ui/qt/onroad.cc b/selfdrive/ui/qt/onroad.cc index 2fae8a4..befc361 100644 --- a/selfdrive/ui/qt/onroad.cc +++ b/selfdrive/ui/qt/onroad.cc @@ -598,7 +598,9 @@ void AnnotatedCameraWidget::drawLaneLines(QPainter &painter, const UIState *s) { // lanelines for (int i = 0; i < std::size(scene.lane_line_vertices); ++i) { - if (customColors != 0) { + if (currentHolidayTheme != 0) { + painter.setBrush(std::get<3>(holidayThemeConfiguration[currentHolidayTheme]).begin()->second); + } else if (customColors != 0) { painter.setBrush(std::get<3>(themeConfiguration[customColors]).begin()->second); } else { painter.setBrush(QColor::fromRgbF(1.0, 1.0, 1.0, std::clamp(scene.lane_line_probs[i], 0.0, 0.7))); @@ -608,7 +610,9 @@ void AnnotatedCameraWidget::drawLaneLines(QPainter &painter, const UIState *s) { // road edges for (int i = 0; i < std::size(scene.road_edge_vertices); ++i) { - if (customColors != 0) { + if (currentHolidayTheme != 0) { + painter.setBrush(std::get<3>(holidayThemeConfiguration[currentHolidayTheme]).begin()->second); + } else if (customColors != 0) { painter.setBrush(std::get<3>(themeConfiguration[customColors]).begin()->second); } else { painter.setBrush(QColor::fromRgbF(1.0, 0, 0, std::clamp(1.0 - scene.road_edge_stds[i], 0.0, 1.0))); @@ -638,7 +642,12 @@ void AnnotatedCameraWidget::drawLaneLines(QPainter &painter, const UIState *s) { float lin_grad_point = (height() - scene.track_vertices[i].y()) / height(); // If acceleration is between -0.2 and 0.2, resort to the theme color - if (std::abs(acceleration[i]) < 0.2 && (customColors != 0)) { + if (std::abs(acceleration[i]) < 0.2 && (currentHolidayTheme != 0)) { + const auto &colorMap = std::get<3>(holidayThemeConfiguration[currentHolidayTheme]); + for (const auto &[position, brush] : colorMap) { + bg.setColorAt(position, brush.color()); + } + } else if (std::abs(acceleration[i]) < 0.2 && (customColors != 0)) { const auto &colorMap = std::get<3>(themeConfiguration[customColors]); for (const auto &[position, brush] : colorMap) { bg.setColorAt(position, brush.color()); @@ -659,6 +668,11 @@ void AnnotatedCameraWidget::drawLaneLines(QPainter &painter, const UIState *s) { } } + } else if (currentHolidayTheme != 0) { + const auto &colorMap = std::get<3>(holidayThemeConfiguration[currentHolidayTheme]); + for (const auto &[position, brush] : colorMap) { + bg.setColorAt(position, brush.color()); + } } else if (customColors != 0) { const auto &colorMap = std::get<3>(themeConfiguration[customColors]); for (const auto &[position, brush] : colorMap) { @@ -696,6 +710,12 @@ void AnnotatedCameraWidget::drawLaneLines(QPainter &painter, const UIState *s) { pe.setColorAt(0.0, QColor::fromHslF(205 / 360., 0.85, 0.56, 1.0)); pe.setColorAt(0.5, QColor::fromHslF(205 / 360., 0.85, 0.56, 0.5)); pe.setColorAt(1.0, QColor::fromHslF(205 / 360., 0.85, 0.56, 0.1)); + } else if (currentHolidayTheme != 0) { + const auto &colorMap = std::get<3>(holidayThemeConfiguration[currentHolidayTheme]); + for (const auto &[position, brush] : colorMap) { + QColor darkerColor = brush.color().darker(120); + pe.setColorAt(position, darkerColor); + } } else if (customColors != 0) { const auto &colorMap = std::get<3>(themeConfiguration[customColors]); for (const auto &[position, brush] : colorMap) { @@ -847,7 +867,9 @@ void AnnotatedCameraWidget::drawLead(QPainter &painter, const cereal::RadarState // chevron QPointF chevron[] = {{x + (sz * 1.25), y + sz}, {x, y}, {x - (sz * 1.25), y + sz}}; - if (customColors != 0) { + if (currentHolidayTheme != 0) { + painter.setBrush(std::get<3>(holidayThemeConfiguration[currentHolidayTheme]).begin()->second); + } else if (customColors != 0) { painter.setBrush(std::get<3>(themeConfiguration[customColors]).begin()->second); } else { painter.setBrush(redColor(fillAlpha)); @@ -1000,14 +1022,51 @@ void AnnotatedCameraWidget::initializeFrogPilotWidgets() { // Custom themes configuration themeConfiguration = { {1, {"frog_theme", 4, QColor(23, 134, 68, 242), {{0.0, QBrush(QColor::fromHslF(144 / 360., 0.71, 0.31, 0.9))}, - {0.5, QBrush(QColor::fromHslF(144 / 360., 0.71, 0.31, 0.5))}, - {1.0, QBrush(QColor::fromHslF(144 / 360., 0.71, 0.31, 0.1))}}}}, + {0.5, QBrush(QColor::fromHslF(144 / 360., 0.71, 0.31, 0.5))}, + {1.0, QBrush(QColor::fromHslF(144 / 360., 0.71, 0.31, 0.1))}}}}, {2, {"tesla_theme", 4, QColor(0, 72, 255, 255), {{0.0, QBrush(QColor::fromHslF(223 / 360., 1.0, 0.5, 0.9))}, - {0.5, QBrush(QColor::fromHslF(223 / 360., 1.0, 0.5, 0.5))}, - {1.0, QBrush(QColor::fromHslF(223 / 360., 1.0, 0.5, 0.1))}}}}, + {0.5, QBrush(QColor::fromHslF(223 / 360., 1.0, 0.5, 0.5))}, + {1.0, QBrush(QColor::fromHslF(223 / 360., 1.0, 0.5, 0.1))}}}}, {3, {"stalin_theme", 6, QColor(255, 0, 0, 255), {{0.0, QBrush(QColor::fromHslF(0 / 360., 1.0, 0.5, 0.9))}, + {0.5, QBrush(QColor::fromHslF(0 / 360., 1.0, 0.5, 0.5))}, + {1.0, QBrush(QColor::fromHslF(0 / 360., 1.0, 0.5, 0.1))}}}}, + }; + + // Holiday themes configuration + holidayThemeConfiguration = { + {1, {"april_fools", 4, QColor(255, 165, 0, 255), {{0.0, QBrush(QColor::fromHslF(39 / 360., 1.0, 0.5, 0.9))}, + {0.5, QBrush(QColor::fromHslF(39 / 360., 1.0, 0.5, 0.5))}, + {1.0, QBrush(QColor::fromHslF(39 / 360., 1.0, 0.5, 0.1))}}}}, + {2, {"christmas", 4, QColor(0, 72, 255, 255), {{0.0, QBrush(QColor::fromHslF(223 / 360., 1.0, 0.5, 0.9))}, + {0.5, QBrush(QColor::fromHslF(223 / 360., 1.0, 0.5, 0.5))}, + {1.0, QBrush(QColor::fromHslF(223 / 360., 1.0, 0.5, 0.1))}}}}, + {3, {"cinco_de_mayo", 6, QColor(255, 0, 0, 255), {{0.0, QBrush(QColor::fromHslF(0 / 360., 1.0, 0.5, 0.9))}, {0.5, QBrush(QColor::fromHslF(0 / 360., 1.0, 0.5, 0.5))}, - {1.0, QBrush(QColor::fromHslF(0 / 360., 1.0, 0.5, 0.1))}}}} + {1.0, QBrush(QColor::fromHslF(0 / 360., 1.0, 0.5, 0.1))}}}}, + {4, {"easter", 4, QColor(200, 150, 200, 255), {{0.0, QBrush(QColor::fromHslF(300 / 360., 0.31, 0.69, 0.9))}, + {0.5, QBrush(QColor::fromHslF(300 / 360., 0.31, 0.69, 0.5))}, + {1.0, QBrush(QColor::fromHslF(300 / 360., 0.31, 0.69, 0.1))}}}}, + {5, {"fourth_of_july", 4, QColor(0, 72, 255, 255), {{0.0, QBrush(QColor::fromHslF(223 / 360., 1.0, 0.5, 0.9))}, + {0.5, QBrush(QColor::fromHslF(223 / 360., 1.0, 0.5, 0.5))}, + {1.0, QBrush(QColor::fromHslF(223 / 360., 1.0, 0.5, 0.1))}}}}, + {6, {"halloween", 6, QColor(255, 0, 0, 255), {{0.0, QBrush(QColor::fromHslF(0 / 360., 1.0, 0.5, 0.9))}, + {0.5, QBrush(QColor::fromHslF(0 / 360., 1.0, 0.5, 0.5))}, + {1.0, QBrush(QColor::fromHslF(0 / 360., 1.0, 0.5, 0.1))}}}}, + {7, {"new_years_day", 4, QColor(23, 134, 68, 242), {{0.0, QBrush(QColor::fromHslF(144 / 360., 0.71, 0.31, 0.9))}, + {0.5, QBrush(QColor::fromHslF(144 / 360., 0.71, 0.31, 0.5))}, + {1.0, QBrush(QColor::fromHslF(144 / 360., 0.71, 0.31, 0.1))}}}}, + {8, {"st_patricks_day", 4, QColor(0, 128, 0, 255), {{0.0, QBrush(QColor::fromHslF(120 / 360., 1.0, 0.25, 0.9))}, + {0.5, QBrush(QColor::fromHslF(120 / 360., 1.0, 0.25, 0.5))}, + {1.0, QBrush(QColor::fromHslF(120 / 360., 1.0, 0.25, 0.1))}}}}, + {9, {"thanksgiving", 6, QColor(255, 0, 0, 255), {{0.0, QBrush(QColor::fromHslF(0 / 360., 1.0, 0.5, 0.9))}, + {0.5, QBrush(QColor::fromHslF(0 / 360., 1.0, 0.5, 0.5))}, + {1.0, QBrush(QColor::fromHslF(0 / 360., 1.0, 0.5, 0.1))}}}}, + {10, {"valentines_day", 4, QColor(23, 134, 68, 242), {{0.0, QBrush(QColor::fromHslF(144 / 360., 0.71, 0.31, 0.9))}, + {0.5, QBrush(QColor::fromHslF(144 / 360., 0.71, 0.31, 0.5))}, + {1.0, QBrush(QColor::fromHslF(144 / 360., 0.71, 0.31, 0.1))}}}}, + {11, {"world_frog_day", 4, QColor(23, 134, 68, 242), {{0.0, QBrush(QColor::fromHslF(144 / 360., 0.71, 0.31, 0.9))}, + {0.5, QBrush(QColor::fromHslF(144 / 360., 0.71, 0.31, 0.5))}, + {1.0, QBrush(QColor::fromHslF(144 / 360., 0.71, 0.31, 0.1))}}}}, }; // Initialize the timer for the turn signal animation @@ -1076,18 +1135,25 @@ void AnnotatedCameraWidget::updateFrogPilotWidgets(QPainter &p) { } // Update the turn signal animation images upon toggle change - if (customSignals != scene.custom_signals) { + if (customSignals != scene.custom_signals || currentHolidayTheme != scene.current_holiday_theme) { + currentHolidayTheme = scene.current_holiday_theme; customSignals = scene.custom_signals; - QString theme_path = QString("../frogpilot/assets/custom_themes/%1/images").arg(themeConfiguration.find(customSignals) != themeConfiguration.end() ? - std::get<0>(themeConfiguration[customSignals]) : ""); - - QStringList imagePaths; - int availableImages = std::get<1>(themeConfiguration[customSignals]); + if (currentHolidayTheme != 0) { + auto themeConfigIt = holidayThemeConfiguration.find(currentHolidayTheme); + QString themeConfigKey = themeConfigIt != holidayThemeConfiguration.end() ? std::get<0>(themeConfigIt->second) : ""; + themePath = QString("../frogpilot/assets/holiday_themes/%1/images").arg(themeConfigKey); + availableImages = std::get<1>(themeConfigIt->second); + } else { + auto themeConfigIt = themeConfiguration.find(customSignals); + QString themeConfigKey = themeConfigIt != themeConfiguration.end() ? std::get<0>(themeConfigIt->second) : ""; + themePath = QString("../frogpilot/assets/custom_themes/%1/images").arg(themeConfigKey); + availableImages = std::get<1>(themeConfigIt->second); + } for (int i = 1; i <= totalFrames; ++i) { int imageIndex = ((i - 1) % availableImages) + 1; - QString imagePath = theme_path + QString("/turn_signal_%1.png").arg(imageIndex); + QString imagePath = themePath + QString("/turn_signal_%1.png").arg(imageIndex); imagePaths.push_back(imagePath); } @@ -1099,8 +1165,8 @@ void AnnotatedCameraWidget::updateFrogPilotWidgets(QPainter &p) { signalImgVector.push_back(pixmap.transformed(QTransform().scale(-1, 1))); // Flipped image } - signalImgVector.push_back(QPixmap(theme_path + "/turn_signal_1_red.png")); // Regular blindspot image - signalImgVector.push_back(QPixmap(theme_path + "/turn_signal_1_red.png").transformed(QTransform().scale(-1, 1))); // Flipped blindspot image + signalImgVector.push_back(QPixmap(themePath + "/turn_signal_1_red.png")); // Regular blindspot image + signalImgVector.push_back(QPixmap(themePath + "/turn_signal_1_red.png").transformed(QTransform().scale(-1, 1))); // Flipped blindspot image } } diff --git a/selfdrive/ui/qt/onroad.h b/selfdrive/ui/qt/onroad.h index 762cf3e..f070d1d 100644 --- a/selfdrive/ui/qt/onroad.h +++ b/selfdrive/ui/qt/onroad.h @@ -141,10 +141,12 @@ private: float laneWidthRight; float speedConversion; + int availableImages; int cameraView; int conditionalSpeed; int conditionalSpeedLead; int conditionalStatus; + int currentHolidayTheme; int customColors; int customSignals; int obstacleDistance; @@ -153,9 +155,12 @@ private: QString leadDistanceUnit; QString leadSpeedUnit; + QString themePath; + QStringList imagePaths; size_t animationFrameIndex; + std::unordered_map>> holidayThemeConfiguration; std::unordered_map>> themeConfiguration; std::vector signalImgVector; diff --git a/selfdrive/ui/qt/sidebar.cc b/selfdrive/ui/qt/sidebar.cc index 5d0ac9e..e66a9ea 100644 --- a/selfdrive/ui/qt/sidebar.cc +++ b/selfdrive/ui/qt/sidebar.cc @@ -47,6 +47,30 @@ Sidebar::Sidebar(QWidget *parent) : QFrame(parent), onroad(false), flag_pressed( isStorageLeft = params.getBool("ShowStorageLeft"); isStorageUsed = params.getBool("ShowStorageUsed"); + holidayThemeConfiguration = { + {1, {"april_fools", {QColor(255, 165, 0)}}}, + {2, {"christmas", {QColor(0, 72, 255)}}}, + {3, {"cinco_de_mayo", {QColor(255, 0, 0)}}}, + {4, {"easter", {QColor(200, 150, 200)}}}, + {5, {"fourth_of_july", {QColor(0, 72, 255)}}}, + {6, {"halloween", {QColor(255, 0, 0)}}}, + {7, {"new_years_day", {QColor(23, 134, 68)}}}, + {8, {"st_patricks_day", {QColor(0, 128, 0)}}}, + {9, {"thanksgiving", {QColor(255, 0, 0)}}}, + {10, {"valentines_day", {QColor(23, 134, 68)}}}, + {11, {"world_frog_day", {QColor(0, 72, 255)}}}, + }; + + for (auto &[key, themeData] : holidayThemeConfiguration) { + QString &themeName = themeData.first; + QString base = QString("../frogpilot/assets/holiday_themes/%1/images").arg(themeName); + std::vector paths = {base + "/button_home.png", base + "/button_flag.png", base + "/button_settings.png"}; + + home_imgs[key] = loadPixmap(paths[0], home_btn.size()); + flag_imgs[key] = loadPixmap(paths[1], home_btn.size()); + settings_imgs[key] = loadPixmap(paths[2], settings_btn.size(), Qt::IgnoreAspectRatio); + } + themeConfiguration = { {0, {"stock", {QColor(255, 255, 255)}}}, {1, {"frog_theme", {QColor(23, 134, 68)}}}, @@ -135,11 +159,17 @@ void Sidebar::updateState(const UIState &s) { setProperty("netStrength", strength > 0 ? strength + 1 : 0); // FrogPilot properties - home_img = home_imgs[scene.custom_icons]; - flag_img = flag_imgs[scene.custom_icons]; - settings_img = settings_imgs[scene.custom_icons]; - - currentColors = themeConfiguration[scene.custom_colors].second; + if (scene.current_holiday_theme != 0) { + home_img = home_imgs[scene.current_holiday_theme]; + flag_img = flag_imgs[scene.current_holiday_theme]; + settings_img = settings_imgs[scene.current_holiday_theme]; + currentColors = holidayThemeConfiguration[scene.current_holiday_theme].second; + } else { + home_img = home_imgs[scene.custom_icons]; + flag_img = flag_imgs[scene.custom_icons]; + settings_img = settings_imgs[scene.custom_icons]; + currentColors = themeConfiguration[scene.custom_colors].second; + } auto frogpilotDeviceState = sm["frogpilotDeviceState"].getFrogpilotDeviceState(); diff --git a/selfdrive/ui/qt/sidebar.h b/selfdrive/ui/qt/sidebar.h index 20a94b5..14effe9 100644 --- a/selfdrive/ui/qt/sidebar.h +++ b/selfdrive/ui/qt/sidebar.h @@ -77,6 +77,7 @@ private: bool isStorageLeft; bool isStorageUsed; + std::unordered_map>> holidayThemeConfiguration; std::unordered_map>> themeConfiguration; std::unordered_map flag_imgs; std::unordered_map home_imgs; diff --git a/selfdrive/ui/soundd.py b/selfdrive/ui/soundd.py index e7378b1..191d011 100644 --- a/selfdrive/ui/soundd.py +++ b/selfdrive/ui/soundd.py @@ -190,14 +190,34 @@ class Soundd: custom_sounds = self.params.get_int("CustomSounds") if custom_theme else 0 theme_configuration = { - 0: "stock", 1: "frog_theme", 2: "tesla_theme", 3: "stalin_theme" } - theme_name = theme_configuration.get(custom_sounds, "stock") - self.sound_directory = BASEDIR + ("/selfdrive/frogpilot/assets/custom_themes/" + theme_name + "/sounds/" if custom_sounds else "/selfdrive/assets/sounds/") + holiday_themes = custom_theme and self.params.get_bool("HolidayThemes") + current_holiday_theme = self.params_memory.get_int("CurrentHolidayTheme") if holiday_themes else 0 + + holiday_theme_configuration = { + 1: "april_fools", + 2: "christmas", + 3: "cinco_de_mayo", + 4: "easter", + 5: "fourth_of_july", + 6: "halloween", + 7: "new_years_day", + 8: "st_patricks_day", + 9: "thanksgiving", + 10: "valentines_day", + 11: "world_frog_day", + } + + if current_holiday_theme != 0: + theme_name = holiday_theme_configuration.get(current_holiday_theme) + self.sound_directory = BASEDIR + ("/selfdrive/frogpilot/assets/holiday_themes/" + theme_name + "/sounds/") + else: + theme_name = theme_configuration.get(custom_sounds) + self.sound_directory = BASEDIR + ("/selfdrive/frogpilot/assets/custom_themes/" + theme_name + "/sounds/" if custom_sounds else "/selfdrive/assets/sounds/") self.load_sounds() diff --git a/selfdrive/ui/ui.cc b/selfdrive/ui/ui.cc index 6292e33..95820fa 100644 --- a/selfdrive/ui/ui.cc +++ b/selfdrive/ui/ui.cc @@ -305,6 +305,7 @@ void ui_update_frogpilot_params(UIState *s) { scene.custom_colors = custom_theme ? params.getInt("CustomColors") : 0; scene.custom_icons = custom_theme ? params.getInt("CustomIcons") : 0; scene.custom_signals = custom_theme ? params.getInt("CustomSignals") : 0; + scene.holiday_themes = custom_theme && params.getBool("HolidayThemes"); scene.driver_camera = params.getBool("DriverCamera"); scene.experimental_mode_via_screen = params.getBool("ExperimentalModeViaScreen") && params.getBool("ExperimentalModeActivation"); @@ -394,6 +395,9 @@ void UIState::update() { if (scene.conditional_experimental) { scene.conditional_status = paramsMemory.getInt("CEStatus"); } + if (scene.holiday_themes) { + scene.current_holiday_theme = paramsMemory.getInt("CurrentHolidayTheme"); + } } void UIState::setPrimeType(PrimeType type) { diff --git a/selfdrive/ui/ui.h b/selfdrive/ui/ui.h index 5aee36c..476bb9f 100644 --- a/selfdrive/ui/ui.h +++ b/selfdrive/ui/ui.h @@ -187,6 +187,7 @@ typedef struct UIScene { bool full_map; bool hide_speed; bool hide_speed_ui; + bool holiday_themes; bool lead_info; bool map_open; bool model_ui; @@ -207,6 +208,7 @@ typedef struct UIScene { int conditional_speed; int conditional_speed_lead; int conditional_status; + int current_holiday_theme; int custom_colors; int custom_icons; int custom_signals;