diff --git a/selfdrive/athena/athenad.py b/selfdrive/athena/athenad.py index d8b495e552..33eba2dab6 100755 --- a/selfdrive/athena/athenad.py +++ b/selfdrive/athena/athenad.py @@ -29,7 +29,7 @@ from selfdrive.hardware import HARDWARE, PC, TICI from selfdrive.loggerd.config import ROOT from selfdrive.loggerd.xattr_cache import getxattr, setxattr from selfdrive.swaglog import cloudlog, SWAGLOG_DIR -from selfdrive.version import get_version, get_git_remote, get_git_branch, get_git_commit +from selfdrive.version import version, get_version, get_git_remote, get_git_branch, get_git_commit ATHENA_HOST = os.getenv('ATHENA_HOST', 'wss://athena.comma.ai') HANDLER_THREADS = int(os.getenv('HANDLER_THREADS', "4")) @@ -493,6 +493,7 @@ def main(): enable_multithread=True, timeout=30.0) cloudlog.event("athenad.main.connected_ws", ws_uri=ws_uri) + params.delete("PrimeRedirected") manage_tokens(api) @@ -502,13 +503,22 @@ def main(): break except (ConnectionError, TimeoutError, WebSocketException): conn_retries += 1 + params.delete("PrimeRedirected") + params.delete("LastAthenaPingTime") + except socket.timeout: + try: + r = requests.get("http://api.commadotai.com/v1/me", allow_redirects=False, + headers={"User-Agent": f"openpilot-{version}"}, timeout=15.0) + if r.status_code == 302 and r.headers['Location'].startswith("http://u.web2go.com"): + params.put_bool("PrimeRedirected", True) + except Exception: + cloudlog.exception("athenad.socket_timeout.exception") params.delete("LastAthenaPingTime") - if TICI: - cloudlog.exception("athenad.main.exception2") except Exception: cloudlog.exception("athenad.main.exception") conn_retries += 1 + params.delete("PrimeRedirected") params.delete("LastAthenaPingTime") time.sleep(backoff(conn_retries)) diff --git a/selfdrive/common/params.cc b/selfdrive/common/params.cc index 9d6fcb7542..6a2a89038e 100644 --- a/selfdrive/common/params.cc +++ b/selfdrive/common/params.cc @@ -186,7 +186,7 @@ std::unordered_map keys = { {"IsTakingSnapshot", CLEAR_ON_MANAGER_START}, {"IsUpdateAvailable", CLEAR_ON_MANAGER_START}, {"UploadRaw", PERSISTENT}, - {"LastAthenaPingTime", PERSISTENT}, + {"LastAthenaPingTime", CLEAR_ON_MANAGER_START}, {"LastGPSPosition", PERSISTENT}, {"LastUpdateException", PERSISTENT}, {"LastUpdateTime", PERSISTENT}, @@ -199,6 +199,7 @@ std::unordered_map keys = { {"PandaFirmwareHex", CLEAR_ON_MANAGER_START | CLEAR_ON_PANDA_DISCONNECT}, {"PandaDongleId", CLEAR_ON_MANAGER_START | CLEAR_ON_PANDA_DISCONNECT}, {"Passive", PERSISTENT}, + {"PrimeRedirected", PERSISTENT}, {"RecordFront", PERSISTENT}, {"RecordFrontLock", PERSISTENT}, // for the internal fleet {"ReleaseNotes", PERSISTENT}, diff --git a/selfdrive/ui/qt/sidebar.cc b/selfdrive/ui/qt/sidebar.cc index ee315c142f..18d2c94d91 100644 --- a/selfdrive/ui/qt/sidebar.cc +++ b/selfdrive/ui/qt/sidebar.cc @@ -62,11 +62,16 @@ void Sidebar::updateState(const UIState &s) { auto last_ping = deviceState.getLastAthenaPingTime(); if (last_ping == 0) { - setProperty("connectStr", "OFFLINE"); - setProperty("connectStatus", warning_color); + if (params.getBool("PrimeRedirected")) { + setProperty("connectStr", "NO\nPRIME"); + setProperty("connectStatus", danger_color); + } else { + setProperty("connectStr", "CONNECT\nOFFLINE"); + setProperty("connectStatus", warning_color); + } } else { bool online = nanos_since_boot() - last_ping < 80e9; - setProperty("connectStr", online ? "ONLINE" : "ERROR"); + setProperty("connectStr", (online ? "CONNECT\nONLINE" : "CONNECT\nERROR")); setProperty("connectStatus", online ? good_color : danger_color); } @@ -121,5 +126,5 @@ void Sidebar::paintEvent(QPaintEvent *event) { // metrics drawMetric(p, "TEMP", QString("%1°C").arg(temp_val), temp_status, 338); drawMetric(p, panda_str, "", panda_status, 518); - drawMetric(p, "CONNECT\n" + connect_str, "", connect_status, 676); + drawMetric(p, connect_str, "", connect_status, 676); } diff --git a/selfdrive/ui/qt/sidebar.h b/selfdrive/ui/qt/sidebar.h index 9c955bb2b0..f1f907d7dd 100644 --- a/selfdrive/ui/qt/sidebar.h +++ b/selfdrive/ui/qt/sidebar.h @@ -3,6 +3,7 @@ #include #include +#include "selfdrive/common/params.h" #include "selfdrive/ui/ui.h" class Sidebar : public QFrame { @@ -49,6 +50,7 @@ private: const QColor warning_color = QColor(218, 202, 37); const QColor danger_color = QColor(201, 34, 49); + Params params; QString connect_str = "OFFLINE"; QColor connect_status = warning_color; QString panda_str = "NO\nPANDA";