Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
143 commits
Select commit Hold shift + click to select a range
6dc91f1
lpa: eSIM profile management operations
greatgitsby Mar 28, 2026
2825c6a
ui: eSIM profile management UI
greatgitsby Mar 28, 2026
1c125f8
esim ui: animate switching profile to front of list
greatgitsby Mar 28, 2026
e5205dd
esim ui: switch profile on tap without confirmation dialog
greatgitsby Mar 28, 2026
dbd1645
esim ui: show last 4 digits of ICCID in profile buttons
greatgitsby Mar 28, 2026
fb6e773
lpa: add nickname, download, and remaining profile operations
greatgitsby Mar 28, 2026
370c4d1
esim: clear busy/switching state on UI thread to prevent snap-back
greatgitsby Mar 28, 2026
2f395ee
esim: prefetch profiles when network settings opens
greatgitsby Mar 28, 2026
297a1c0
esim ui: show error dialog when operations fail
greatgitsby Mar 28, 2026
8de266f
esim ui: add profile via QR code scanning
greatgitsby Mar 28, 2026
c2586cd
esim ui: use pyzbar instead of cv2 for QR detection
greatgitsby Mar 28, 2026
2e0a2e1
esim ui: fix Y plane reshape using height*stride instead of uv_offset
greatgitsby Mar 28, 2026
b5e82df
esim ui: don't close camera in hide_event, defer to __del__
greatgitsby Mar 28, 2026
983a0c3
esim: fix lambda capturing exception variable in Python 3.12
greatgitsby Mar 28, 2026
ee311be
esim: fix stale profile data race in refresh_profiles
greatgitsby Mar 28, 2026
2c76542
esim: fix lambda capturing exception variable in refresh_profiles
greatgitsby Mar 28, 2026
d612cf7
esim: fix remaining lambda exception captures in Py 3.12
greatgitsby Mar 28, 2026
1ababbb
esim: reconnect serial in list_profiles on I/O error
greatgitsby Mar 28, 2026
247f2dc
esim ui: throttle QR scanning to 5fps
greatgitsby Mar 28, 2026
82459d9
esim ui: move QR decode to background thread
greatgitsby Mar 28, 2026
2f4ed88
esim ui: downsample frame 2x before QR decode
greatgitsby Mar 28, 2026
db42e2f
esim ui: downsample frame 4x before QR decode
greatgitsby Mar 28, 2026
3fe0696
Revert "esim ui: downsample frame 4x before QR decode"
greatgitsby Mar 28, 2026
325e04d
esim ui: center crop frame before QR decode
greatgitsby Mar 28, 2026
2fac244
esim ui: center crop QR scan area with border overlay
greatgitsby Mar 28, 2026
5812e0f
pandad: disable IR LED during driver view
greatgitsby Mar 28, 2026
74c7503
Revert "pandad: disable IR LED during driver view"
greatgitsby Mar 28, 2026
4756a23
Reapply "pandad: disable IR LED during driver view"
greatgitsby Mar 28, 2026
4a04f6c
esim ui: smaller text on QR scanner screen
greatgitsby Mar 28, 2026
2600cfb
esim ui: restore camera starting size, move QR label below crop box
greatgitsby Mar 28, 2026
22fbaaa
add pyzbar with bundled zbar from op-dependencies
greatgitsby Mar 28, 2026
f840e08
ui: install pyzbar with bundled zbar during build
greatgitsby Mar 28, 2026
15d324a
esim: show profile name as header and modem IP as subtext
greatgitsby Mar 28, 2026
b4bd917
esim: fix ppp0 IP parsing to use inet field, not peer
greatgitsby Mar 28, 2026
c3e4e1b
esim: cache modem IP in manager, poll every 5s
greatgitsby Mar 28, 2026
20c4052
esim: show 'obtaining IP...' while modem IP is pending
greatgitsby Mar 28, 2026
7e84a54
esim: show actual cell signal strength on network button
greatgitsby Mar 28, 2026
7b9c219
esim: rename ESimManager to CellularManager
greatgitsby Mar 28, 2026
9b175d9
esim: simplify modem reboot to direct AT commands over serial
greatgitsby Mar 28, 2026
02d0b78
esim: graduated CAT_BUSY recovery before full modem reboot
greatgitsby Mar 28, 2026
7c15545
esim: port eSIM UI to big UI and abstract CellularManager
greatgitsby Mar 28, 2026
84e8159
esim: fix installing dialog stuck by adding nav_stack_tick
greatgitsby Mar 28, 2026
78235cc
esim: separate Wi-Fi/eSIM toggle from Advanced button
greatgitsby Mar 28, 2026
6f4d176
esim: close all stale logical channels before opening ISD-R
greatgitsby Mar 28, 2026
27ba4d6
esim: fix modem recovery timeout after reboot
greatgitsby Mar 28, 2026
2ae3c9a
esim: use refreshFlag=true to avoid modem reboot on profile switch
greatgitsby Mar 28, 2026
fe72268
esim: wait for modem to settle after SIM refresh on profile switch
greatgitsby Mar 28, 2026
661d3dc
esim: enable LPA debug logging
greatgitsby Mar 28, 2026
78ff53b
esim: don't wait for ISD-R in _clear_cat_busy
greatgitsby Mar 28, 2026
55a1e11
esim: disable LPA debug logging
greatgitsby Mar 28, 2026
a6a9fd1
esim: enable debug logging
greatgitsby Mar 28, 2026
888907b
esim: keep screen awake while installing profile
greatgitsby Mar 28, 2026
d0a8edd
esim: show friendly error for already-installed profile QR codes
greatgitsby Mar 28, 2026
d2a5db8
esim: add ES9P error code to friendly message mapping
greatgitsby Mar 28, 2026
dead5a0
esim: fix screen flashing, use override timeout instead of per-frame …
greatgitsby Mar 28, 2026
4e1b9ec
esim: add friendly error messages for BPP installation failures
greatgitsby Mar 28, 2026
21a58de
esim: add debug logging to trace callback flow
greatgitsby Mar 28, 2026
c2e53f8
esim: remove debug logging
greatgitsby Mar 28, 2026
0ae32ef
esim: fix refresh_profiles interfering with in-progress operations
greatgitsby Mar 28, 2026
2beaa3e
esim: process pending notifications on every profile refresh
greatgitsby Mar 28, 2026
aa95e23
esim: remove MockLPA fallback, retry LPA initialization on failure
greatgitsby Mar 28, 2026
ecfee5f
esim: use refresh=False + modem reboot for EG916Q profile switching
greatgitsby Mar 28, 2026
0ced789
esim: match camera starting label style to big UI
greatgitsby Mar 29, 2026
a99a4fa
esim: match camera starting label style to driver camera dialog
greatgitsby Mar 29, 2026
74ce081
esim: increase QR scanner instruction text size
greatgitsby Mar 29, 2026
734951d
esim: show installing dialog immediately after QR scan
greatgitsby Mar 29, 2026
97b2531
esim: show comma.ai name and logo for comma profiles
greatgitsby Mar 29, 2026
76f3bf4
esim: align comma icon with button text padding
greatgitsby Mar 29, 2026
2a54870
esim: prevent renaming comma profile
greatgitsby Mar 29, 2026
0477f79
esim: replace ACTIVE text with disabled button, disable comma profile…
greatgitsby Mar 29, 2026
a93dc63
esim: add rename button to profile rows, remove redundant is_comma check
greatgitsby Mar 29, 2026
3a2bd39
esim: widen rename button to prevent text wrapping
greatgitsby Mar 29, 2026
e259d87
esim: add nickname prompt after QR scan before installing
greatgitsby Mar 29, 2026
568e42b
esim: fix comma profile switching, only block rename not switch
greatgitsby Mar 29, 2026
e60b716
esim: remove rename-on-click for active profile, use button instead
greatgitsby Mar 29, 2026
72a1bda
esim: rename comma profile display name to comma prime
greatgitsby Mar 29, 2026
99001ba
esim: clean up installing dialog to match confirm dialog style
greatgitsby Mar 29, 2026
de9625b
esim: add 120s timeout watchdog to profile download
greatgitsby Mar 29, 2026
40dc6f9
esim: check wwan0 in addition to ppp0 for modem IP
greatgitsby Mar 29, 2026
8f47b4d
esim: suppress stderr from modem IP check
greatgitsby Mar 29, 2026
4117560
esim: show modem IP address in advanced network settings
greatgitsby Mar 29, 2026
e40c2ac
esim: rename IP Address to WiFi IP Address in advanced settings
greatgitsby Mar 29, 2026
29750cf
esim: fix eSIM button on advanced tab switching to eSIM not WiFi
greatgitsby Mar 29, 2026
744a521
esim: use full resolution for QR code detection
greatgitsby Mar 29, 2026
93973ac
Revert "esim: use full resolution for QR code detection"
greatgitsby Mar 29, 2026
7b3f4c3
esim: match mici QR scanner camera starting text to driver cam size
greatgitsby Mar 29, 2026
ac53f15
esim: always use refresh=True for profile switching
greatgitsby Mar 29, 2026
c889126
esim: revert to conditional refresh flag, EG916Q needs refresh=False …
greatgitsby Mar 29, 2026
f15ff5c
esim: always show enable roaming toggle in mici network settings
greatgitsby Mar 29, 2026
8172581
esim: remove modem reboot responsibility from LPA
greatgitsby Apr 2, 2026
0b47299
esim: always use refresh=True and remove ICCID suffix from profile names
greatgitsby Apr 2, 2026
5719d42
esim: improve catBusy recovery with retries and channel cleanup
greatgitsby Apr 2, 2026
61378dc
esim: reset modem after profile switch to re-read new SIM
greatgitsby Apr 2, 2026
f7e0561
esim: reset modem after profile switch on mici to re-read new SIM
greatgitsby Apr 2, 2026
117ab96
esim: match status text style to wifi, blank modem IP when unavailable
greatgitsby Apr 2, 2026
76bc66d
esim: prefetch profiles on CellularManager init
greatgitsby Apr 2, 2026
a764593
esim: use lte.sh GPIO reboot for modem reset after profile switch on …
greatgitsby Apr 2, 2026
92baea1
esim: move profile prefetch to NetworkUI show, fix hex parse error
greatgitsby Apr 2, 2026
41d7e1e
esim: reconnect serial after GPIO modem reboot
greatgitsby Apr 2, 2026
6201dff
esim: move modem reboot to background, show dots indicator
greatgitsby Apr 2, 2026
8917c50
esim: disable refresh flag on mici, no SIM presence pin wired
greatgitsby Apr 2, 2026
0bda16d
esim: remove modem reboot UI indicator, keep reboot in background
greatgitsby Apr 2, 2026
4118f71
esim: use CFUN cycle + ModemManager restart instead of GPIO reboot
greatgitsby Apr 2, 2026
58dd5d6
esim: always use refresh=False for profile switching
greatgitsby Apr 2, 2026
d39ce6e
esim: auto-reconnect serial port on I/O errors
greatgitsby Apr 2, 2026
90cb73a
esim: non-blocking modem reset after profile switch for consistent UX
greatgitsby Apr 3, 2026
5dac46d
esim: proactive CAT session cleanup before profile operations (SGP.22…
greatgitsby Apr 3, 2026
9922c32
esim: simplify catBusy cleanup — CFUN cycle with 500ms sleeps
greatgitsby Apr 3, 2026
784ac72
esim: enable debug logging in lpa.py
greatgitsby Apr 3, 2026
89f2bd2
esim: only close our own logical channel in profile switch prep
greatgitsby Apr 3, 2026
726a78e
esim: remove inline process_notifications from profile operations
greatgitsby Apr 3, 2026
e573c9e
esim: fix open_isdr loop — only close own channel, drain serial buffer
greatgitsby Apr 3, 2026
4fe4978
esim: CFUN cycle recovery in open_isdr after repeated failures
greatgitsby Apr 3, 2026
7910942
esim: use CFUN=0 instead of CFUN=4 for modem reset
greatgitsby Apr 3, 2026
f7eb50c
esim: restart ModemManager to recover from SIM failure in open_isdr
greatgitsby Apr 3, 2026
b11a0e3
esim: use lte.sh start to recover from SIM failure in open_isdr
greatgitsby Apr 3, 2026
aab58a3
esim: reconnect serial after lte.sh reset and handle stale fd
greatgitsby Apr 3, 2026
bb3700c
esim: remove CFUN cycle from pre-enable prep — causes SIM failure
greatgitsby Apr 3, 2026
4bfdc66
esim: modem reset before list_profiles after profile switch
greatgitsby Apr 4, 2026
a2a8029
esim: strip catBusy retry loops and reset_modem from TiciLPA
greatgitsby Apr 4, 2026
522b17f
esim: filesystem lock for channel access, remove singleton
greatgitsby Apr 4, 2026
12169cc
esim: catBusy retry for switch/delete, lte.sh modem reset, fix termio…
greatgitsby Apr 4, 2026
634563e
esim: inhibit ModemManager during profile switch, rename _channel to …
greatgitsby Apr 4, 2026
3df559d
esim: cleanup TiciLPA — remove docstrings, simplify locking, use inhi…
greatgitsby Apr 4, 2026
95a7255
esim: cleanup CellularManager — drop MockLPA, deduplicate worker pattern
greatgitsby Apr 4, 2026
bed7ef2
esim: replace lte.sh with CFUN cycle, reduce sleeps
greatgitsby Apr 5, 2026
84a7167
esim: tune CFUN wait to 2s, fix refresh/switch race in CellularManager
greatgitsby Apr 5, 2026
721b4b9
esim: fallback to lte.sh modem reset on catBusy during profile switch
greatgitsby Apr 5, 2026
ea9330d
esim: hide delete button while busy switching profiles
greatgitsby Apr 5, 2026
dc541c1
esim: replace pyzbar with zxing-cpp for QR decoding
greatgitsby Apr 5, 2026
f27e169
esim: update uv.lock for zxing-cpp
greatgitsby Apr 5, 2026
cee3afb
esim: remove 2x downsampling from QR scanner
greatgitsby Apr 5, 2026
a71283d
esim: remove background thread, cropping, and scan region border from…
greatgitsby Apr 5, 2026
5415959
esim: remove DBUS fallback from AtClient, use serial exclusively
greatgitsby Apr 5, 2026
80c0469
esim: poll for modem readiness after CFUN cycle instead of fixed 2s s…
greatgitsby Apr 5, 2026
fe591fe
esim: use refreshFlag=TRUE on tizi, skip CFUN cycle
greatgitsby Apr 5, 2026
d22e87a
esim: wait 1s after refreshFlag switch for SIM toolkit to settle
greatgitsby Apr 5, 2026
4a33c13
Merge branch 'master' into esim
greatgitsby Apr 5, 2026
698fcc5
esim: re-add DBUS fallback for devices without serial port
greatgitsby Apr 5, 2026
8acd96f
esim: hold filesystem lock during AtClient echo disable
greatgitsby Apr 5, 2026
2e04193
esim: remove _disable_echo from AtClient
greatgitsby Apr 5, 2026
e691aba
esim: move MM_DEVICE_UID constant to top of file
greatgitsby Apr 5, 2026
77619cf
esim: lazy-open serial port on first query
greatgitsby Apr 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ dependencies = [

# ui
"raylib > 5.5.0.3",
"zxing-cpp==3.0.0",
"qrcode",
"jeepney",
"pillow",
Expand Down Expand Up @@ -147,7 +148,7 @@ testpaths = [
[tool.codespell]
quiet-level = 3
# if you've got a short variable name that's getting flagged, add it here
ignore-words-list = "bu,ro,te,ue,alo,hda,ois,nam,nams,ned,som,parm,setts,inout,warmup,bumb,nd,sie,preints,whit,indexIn,ws,uint,grey,deque,stdio,amin,BA,LITE,atEnd,UIs,errorString,arange,FocusIn,od,tim,relA,hist,copyable,jupyter,thead,TGE,abl,lite,ser"
ignore-words-list = "bu,ro,te,ue,alo,hda,ois,nam,nams,ned,som,parm,setts,inout,warmup,bumb,nd,sie,preints,whit,indexIn,ws,uint,grey,deque,stdio,amin,BA,LITE,atEnd,UIs,errorString,arange,FocusIn,od,tim,relA,hist,copyable,jupyter,thead,TGE,abl,lite,ot,ser"
builtin = "clear,rare,informal,code,names,en-GB_to_en-US"
skip = "./third_party/*, ./tinygrad/*, ./tinygrad_repo/*, ./msgq/*, ./panda/*, ./opendbc/*, ./opendbc_repo/*, ./rednose/*, ./rednose_repo/*, ./teleoprtc/*, ./teleoprtc_repo/*, *.po, uv.lock, *.onnx, ./cereal/gen/*, */c_generated_code/*, docs/assets/*, tools/plotjuggler/layouts/*, selfdrive/assets/offroad/mici_fcc.html"

Expand Down
4 changes: 3 additions & 1 deletion selfdrive/pandad/pandad.cc
Original file line number Diff line number Diff line change
Expand Up @@ -326,7 +326,9 @@ void process_peripheral_state(Panda *panda, PubMaster *pm, bool no_fan_control)
cur_integ_lines = (driver_view ? integ_lines_filter_driver_view : integ_lines_filter).update(cur_integ_lines);
last_driver_camera_t = event.getLogMonoTime();

if (cur_integ_lines <= CUTOFF_IL) {
if (driver_view) {
ir_pwr = 0;
} else if (cur_integ_lines <= CUTOFF_IL) {
ir_pwr = 0;
} else if (cur_integ_lines > SATURATE_IL) {
ir_pwr = 100;
Expand Down
48 changes: 48 additions & 0 deletions selfdrive/ui/mici/layouts/settings/network/__init__.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,58 @@
import pyray as rl

from cereal import log
from openpilot.system.ui.lib.cellular_manager import CellularManager
from openpilot.selfdrive.ui.mici.layouts.settings.network.wifi_ui import WifiIcon
from openpilot.selfdrive.ui.mici.widgets.button import BigButton
from openpilot.selfdrive.ui.ui_state import ui_state
from openpilot.system.ui.lib.application import gui_app
from openpilot.system.ui.lib.wifi_manager import WifiManager, ConnectStatus, SecurityType, normalize_ssid

NetworkType = log.DeviceState.NetworkType


class ESimNetworkButton(BigButton):
def __init__(self, cellular_manager: CellularManager):
self._cellular_manager = cellular_manager
self._cell_none_icon = gui_app.texture("icons_mici/settings/network/cell_strength_none.png", 64, 47)
self._cell_low_icon = gui_app.texture("icons_mici/settings/network/cell_strength_low.png", 64, 47)
self._cell_medium_icon = gui_app.texture("icons_mici/settings/network/cell_strength_medium.png", 64, 47)
self._cell_high_icon = gui_app.texture("icons_mici/settings/network/cell_strength_high.png", 64, 47)
self._cell_full_icon = gui_app.texture("icons_mici/settings/network/cell_strength_full.png", 64, 47)
super().__init__("esim", "no active profile", self._cell_none_icon)

def _update_state(self):
super()._update_state()

if self._cellular_manager.busy:
self.set_text("esim")
self.set_value("switching...")
self.set_icon(self._cell_none_icon)
else:
active = next((p for p in self._cellular_manager.profiles if p.enabled), None)
if active:
name = active.nickname or active.provider or active.iccid[:12]
self.set_text(f"{name} (...{active.iccid[-4:]})")
self.set_value(self._cellular_manager.modem_ip or "obtaining IP...")
self.set_icon(self._get_cell_icon())
else:
self.set_text("esim")
self.set_value("no active profile")
self.set_icon(self._cell_none_icon)

def _get_cell_icon(self):
device_state = ui_state.sm['deviceState']
net_type = device_state.networkType
if net_type not in (NetworkType.cell2G, NetworkType.cell3G, NetworkType.cell4G, NetworkType.cell5G):
return self._cell_none_icon
strength = device_state.networkStrength
level = max(0, min(5, strength.raw + 1)) if strength.raw > 0 else 0
return {0: self._cell_none_icon,
2: self._cell_low_icon,
3: self._cell_medium_icon,
4: self._cell_high_icon,
5: self._cell_full_icon}.get(level, self._cell_none_icon)


class WifiNetworkButton(BigButton):
def __init__(self, wifi_manager: WifiManager):
Expand Down
Loading
Loading