diff --git a/selfdrive/ui/ui.cc b/selfdrive/ui/ui.cc index 12a469a4a2..905656b2be 100644 --- a/selfdrive/ui/ui.cc +++ b/selfdrive/ui/ui.cc @@ -42,12 +42,10 @@ static void set_awake(UIState *s, bool awake) { // TODO: replace command_awake and command_sleep with direct calls to android if (awake) { LOGW("awake normal"); - system("service call window 18 i32 1"); // enable event processing framebuffer_set_power(s->fb, HWC_POWER_MODE_NORMAL); } else { LOGW("awake off"); set_brightness(s, 0); - system("service call window 18 i32 0"); // disable event processing framebuffer_set_power(s->fb, HWC_POWER_MODE_OFF); } } @@ -57,8 +55,20 @@ static void set_awake(UIState *s, bool awake) { #endif } +int event_processing_enabled = -1; +static void enable_event_processing(bool yes) { + if (event_processing_enabled != 1 && yes) { + system("service call window 18 i32 1"); // enable event processing + event_processing_enabled = 1; + } else if (event_processing_enabled != 0 && !yes) { + system("service call window 18 i32 0"); // disable event processing + event_processing_enabled = 0; + } +} + static void navigate_to_settings(UIState *s) { #ifdef QCOM + enable_event_processing(true); system("am broadcast -a 'ai.comma.plus.SidebarSettingsTouchUpInside'"); #else // computer UI doesn't have offroad settings @@ -67,6 +77,9 @@ static void navigate_to_settings(UIState *s) { static void navigate_to_home(UIState *s) { #ifdef QCOM + if (s->vision_connected) { + enable_event_processing(false); + } system("am broadcast -a 'ai.comma.plus.HomeButtonTouchUpInside'"); #else // computer UI doesn't have offroad home @@ -722,6 +735,7 @@ static void* vision_connect_thread(void *args) { s->vision_connected = true; s->vision_connect_firstrun = true; + enable_event_processing(false); // Drain sockets while (true){ @@ -926,6 +940,8 @@ int main(int argc, char* argv[]) { } if (!s->vision_connected) { + // always process events offroad + enable_event_processing(true); if (s->status != STATUS_STOPPED) { update_status(s, STATUS_STOPPED); }