Release inherited Params locks correctly across fork and exec. Preserve qualified lateral armed intent through temporary faults, restore the Big UI CEM gauge, improve speed typography, and hide unavailable CEM initialization text. Include matching device artifacts and focused regression coverage.
* 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.
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.
* try cffi params
* ctypes
* lil more
* rm cython
* lil more
* that was fine
* lil more
* Drop unrelated Params concurrency changes
* Clean up ctypes Params build integration
* just c
* Clarify Params exception translation
* Expand Params C wrappers
* lil more