a0ae1ffc0dd41070ae3abd1b28ddabba4d5b85a4
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
myscan
Linux driver tools for the Hama myScan (00052343) scanner mouse, a Dacuda design (USB 274f:c001: UVC MJPEG camera + HID mouse).
myscan/xu.py— UVC extension-unit access: switch between mouse and scan mode, LEDs, exposuremyscan/frame.py— fix the lying JPEG header and decode the per-frame sensor record (laser dx/dy)myscan/calib.py— per-device calibration from the mouse's EEPROM: colour gains, flat field, lens undistortionmyscan/pagegraph.py— assemble a page from all frames at once: frame-to-frame registration, loop closures between passes, pose-graph optimisation (used byscan.pyandstitch.py)myscan/stitch.py— the older live, frame-by-frame stitcher (stitch.py --live) and shared helperstools/scan.py— scan with the button:python tools/scan.py(press to start, press again to stop)tools/record.py— record a scan session:python tools/record.py -d 25 -o scan_texttools/stitch.py— stitch a recording:python tools/stitch.py scan_text->scan_text/page.pngtools/probe.py— log raw frames and HID reports side by sidetools/scantest.py— minimal scan-mode test: grab frames, decode records, restore mouse mode
See FINDINGS.md for the protocol and calibration notes, and EEPROM.md for the calibration blob.
Setup: python -m venv .venv && .venv/bin/pip install -r requirements.txt
Calibration cache: calib/eeprom_3000.bin in this repo is the EEPROM dump of one specific mouse.
myscan/calib.py uses that file whenever it exists and only reads the mouse when it is missing. With a
different mouse, delete it first (rm calib/eeprom_3000.bin), so the next scan reads and caches your own
unit's calibration (about 15 s).
Description
Vibecoded driver and picture stitched for the Dacuda Scanner Mose (HAMA myScan)
1 MiB
Languages
Python
100%