* Cabana: standardize floating dropdown menus
* Cabana: use uniform items in menus and combo lists
* Cabana: remove dropdown test and explanatory comments
* cabana: standardize button spacing and control alignment
* cabana: center shared step controls and inset chart content
* cabana: use uniform per-chart content insets
* cabana: redraw floating panes during native resizing
* cabana: keep rendering while native resize is held
* cabana: use ImGui decorations to avoid native resize loops
* cabana: draw docking previews only on the target viewport
selfdrived: don't alert on a message that was never received
posenetInvalid, locationdTemporaryError and paramsdTemporaryError are raised
off the capnp defaults of deviceMotion and vehicleParameters before either
message has ever arrived. When modeld is down, locationd and paramsd never
publish, the defaults read as a nan posenet speed, and that NoEntryAlert can
hide the process not running alert that names modeld.
Same guard as the big model alert in #38500.
* Move LFS asset transfers to xet-core
* Limit migration to Git LFS hosting on Hugging Face
---------
Co-authored-by: Harald Schäfer <6804392+haraschax@users.noreply.github.com>
* esim: MICI profile download UI
* Show temporary feedback for non-LPA QR codes
* Scan eSIM QR codes every 250 ms
* Shrink eSIM error text and log displayed errors
* Activate downloaded eSIM through the profile tap flow
* Let the eSIM connectivity error wrap naturally
* Release add-profile button feedback immediately
* Check internet before opening the eSIM QR scanner
* Use UI network state and standard connectivity dialog for eSIM
* Drop LPA prime settings change from eSIM download UI
* Scope eSIM UI constants to their owning classes
* Remove unused ot codespell exception
* esim: simplify profile download operation and UI state
* esim: share activation code validation with QR scanner
* esim: match QR scanner video to cabin preview
* esim: show errors in a scrollable text dialog
* esim: require nonblank profile nicknames
* qrcode: add QR decoder
Decodes a QR code from a grayscale image or a module matrix: adaptive
binarization, finder pattern search by run ratios, perspective sampling
with alignment pattern refinement, format info, unmasking, block
de-interleaving, Reed-Solomon correction, and numeric, alphanumeric,
byte (with ECI), and Kanji segments.
Fixtures are packed matrices from python-qrcode 8.2 covering every
version and level, plus Segno 1.6.6 matrices for the ECI cases.
* qrcode: tune decoder for the device
Measured on a comma mici with real cabin frames downsampled to 672x380,
the size the eSIM screen scans at. Per frame: 30 ms -> 8 ms with no
code in view, 42 ms -> 13 ms with a code.
- binarize: fixed two-radius fill from one integral image instead of an
iterative outward fill (a dark cabin is almost all flat tiles), tile
stats on a contiguous layout, flat tiles decided whole so sensor noise
cannot become speckle, uint8 threshold compare
- finder search: scan every 4th row, build column runs only at
candidate columns
- alignment search starts at a 2-module radius
- Reed-Solomon syndromes through table lookups, placement order cached
* qrcode: simplify decoder
Fold the function-module mask into _data_coords and the format
coordinates into _read_format, evaluate masks directly on the data
coordinates, compact the ECI, numeric, and alphanumeric parsing, and
flatten the retry loop in decode. No behavior change.
Replace the level-L-only Reed-Solomon parameters, the single hardcoded
format word, and the bitwise GF(256) multiply with the full EC table,
the 32 format words, and log/antilog tables. Block splitting and
interleaving move into _block_lengths and _interleaved. This is the
structure a decoder needs to read any version, level, and mask; the
encoder's module matrices are unchanged and test_encoder pins them.
The closed-form step between alignment patterns rounds the wrong way
for version 32 (28 instead of 26). Use the form that is right for every
version. The encoder only emits versions 1-20, so its output is
unchanged.