บันทึกการเปลี่ยนแปลง
ประวัติการอัปเดตและบันทึกเวอร์ชัน romHEX14
ล่าสุด
1.0.0-beta3
ส่งออก/นำเข้า WinOLS แบบสมบูรณ์, นำเข้า KP เป็นชุดแมพอย่างถูกต้อง, แป้น Cmd+K สำหรับค้นหา, แก้ปัญหา ROM ทุกตัวถูกตรวจจับเป็น MED17, รองรับไฟล์ .mpc และหน้าต้อนรับที่ปรับขนาดได้ลื่นไหล
ฟีเจอร์เด่น
- WinOLS round-trip — byte-faithful .ols import + export with FADECAFE / CAFEAFFE sentinels and 26-byte preamble passthrough; exports load cleanly back into WinOLS
- KP map pack import — KP files now merge maps into the active project (mirrors A2L flow) instead of opening a new project; intern parser ported from parse_kp.py with comment-prefixed records and dimension heuristic
- Cmd+K command palette — instant fuzzy search across open projects, maps, settings, and every menu action
- Welcome page v3 — fluid 1–10 column adaptive grid, brand-logo fronted recent projects, quick-action tiles, recent maps strip, dismissible empty-state hint
- .mpc ROM format support — recognized in every ROM picker (welcome drop zone, New Project, Open ROM, Auto-detect ECU, Patch Editor, ROM Link)
ตรวจจับ ECU
- Fixed every ROM detecting as MED17 — the FADECAFE + CAFEAFFE sentinel pair is present in most modern Bosch ROMs and was over-matching; auto-detect now re-runs the family extractor when the initial result is generic
- extractIdBlock thresholds loosened (window 96 → 160, printable 60 → 20) so any P010-prefixed slab is accepted
- ROMs now correctly resolve to specific families (EDC17C64, MEVD17.x, EDC17CP14, MED17.5.x, …) instead of the generic MED17/MEDC17 catch-all
UX และการขัดเกลา
- VSCode-style autosave preference — pick off / after delay / on focus change / on window deactivate, persisted per workspace
- OLS-imported projects auto-suggest filenames as OLS_brand_model_ecu.rx14proj so disk listings stay tidy
- Empty-state card on the project view is dismissible per project (× button) and the dismissal persists in the project file
- Auto-detected map list is collapsible / hideable per project — keep the sidebar focused on user-curated maps
- Update download failure now shows a popup explaining GFW issues with a one-click "Open in browser" fallback to the GitHub release
- Manage account link goes to /login.php (was a broken /account URL)
- Consolidated duplicate Import OLS / Import WinOLS Project menu items into a single entry
- QSS: removed the inflating QToolButton / QPushButton min-sizes that were making toolbar buttons 60–80 px wide; bumped disabled-text contrast to WCAG AA (4.97:1)
ประสิทธิภาพ
- Single-call onMapActivated path — fixes the brief overlay flash where maps briefly opened then closed when clicking sidebar entries
- BLK_AMAP block in the rx14proj container preserves auto-detected maps across save / load without re-running the scanner
- Project::open peek check uses byte-by-byte little-endian magic instead of first-byte sniffing — no more false positives on files starting with "R"
- i18n architecture: tr() text separated from URL / HTML wrappers so URL changes no longer invalidate translations
การแปลภาษา
- All four language files at 100% — 1516 / 1516 finished entries in en, es, th, zh
- New strings for autosave modes, command palette, KP / OLS import flows, ECU auto-detect, .mpc support, and update-failure popup all translated
แก้ไขข้อบกพร่อง
- KP import: parser now returns the correct map count (was returning 0 for all KP files because it was using the OLS Kennfeld wire format instead of KP's comment-prefixed layout)
- KP import: no longer creates a spurious new project — maps are merged into the active project with name + address dedupe
- ECU auto-detect: ROMs no longer all show as MED17
- Map overlay: no longer briefly opens then closes when clicking a map in the sidebar
- Manage account link: now reaches a real URL and the "Manage account" string is still translated when the URL changes
- OLS export: HEX-imported projects are honestly refused with a clear message pointing to Save Project / Export ROM, instead of producing broken .ols files
- Project naming: spaces stripped from auto-suggested OLS project filenames
เบต้า
1.0.0-beta2
ยกเครื่อง UX ทั้งหมด หน้าต้อนรับใหม่ เปรียบเทียบฐานสิบหกโดยไม่ต้องใช้ A2L ผู้ช่วย AI สร้างใหม่ เอกสารออนไลน์ครบ และ UI แปลครบ 100% ใน 4 ภาษา
ฟีเจอร์เด่น
- Welcome page v2 — premium hero with split-style "Calibrate smarter." tagline, three colored action cards (Open / New / Import) with hover lift, recent projects with rich metadata + auto-fetched brand logos, account ribbon for signed-in users, "What's New" + "Documentation" cards, and a quick Project Manager shortcut
- Hex Comparison — pure byte-level diff that needs no A2L. Pick any two byte sources across every open project (Original, Current, Factory ROM, linked ROMs, version snapshots) grouped by project, navigate via a red density waveform, jump through diffs from a virtualized list, and scroll-track everything live
- AI Assistant rebuild — proper Markdown rendering via QTextBrowser (lists, links, code blocks, tables now work), token + cost chip in the input row, per-message Copy + Regenerate buttons, and per-project conversation persistence across sessions
- Documentation site — 19 sections × 4 languages live at romhex14.com/docs, accessible from the Help button + Documentation card with the app's current locale auto-applied
UX และการขัดเกลา
- Welcome page now opens straight to the app — the multi-slide intro wizard is gone
- Account ribbon shows email, plan / module count, and a "Manage account" link with hover-glow accent border
- Recent projects rows show brand logo (auto-fetched from the open-source car-logos dataset), brand · model · ECU · customer, and relative time ("2 days ago")
- Project name display is now file-first: filename + "(Brand Model · ECU · year)" — no more confusion when two projects share a brand
- Login dialog redesigned to match the About dialog tone — single primary blue sign-in, header strip, sunken inputs, success / module pills
- Universal "Risky Change" confirmation — DTC, Patch Editor, Map Pack, and AI Functions all share the same confirm dialog with diff preview, snapshot-by-default, typed-confirmation gate for large operations, and per-row before / after table
- Cancellable progress dialogs for long apply operations — chunked, modal, with full rollback on cancel
- Snapshot before every destructive action by default (DTC, Patch, Map Pack, AI Functions, AI inline writes) so reverting is one click
- Help and Preferences buttons in the welcome top bar now actually do something
- Every dialog is resizable, with last size persisted in QSettings (About, Config, Hex Compare, KP Import, Project Properties, Map Properties, ROM Link, ROM Compare, Checksum Select, Create Map, Project Manager, New Project, A2L Import)
- Removed the 120-line animated robot in AI Functions in favor of the unified confirm dialog
เครื่องมือเปรียบเทียบ
- Hex Comparison waveform — bright red gradient density bars with translucent ambient wash so even single-byte changes in a 4 MB ROM are visible at a glance
- Per-row red marker stripe in the diff view so you can scan-scroll for changes
- Diff list panel with virtualized rendering — handles hundreds of thousands of diff runs without lag
- Cross-widget sync: click waveform → byte view jumps; click list row → byte view jumps; scroll byte view → waveform marker tracks
- Hex view bytes-per-row now adapts to viewport width (4 / 8 / 16 / 32 cols) so panes never overlap
ประสิทธิภาพ
- ByteDiffWidget paint pipeline rewritten — pre-built lookup tables for hex + ASCII glyphs, stack-buffer snprintf for addresses, two-pass rendering with grouped pen color changes
- RomCompare::diffBytesSummary + diffRuns — 8-byte word-stride scan with no per-byte QVector allocation; orders of magnitude faster on multi-MB ROMs
- Signal-driven autosave — switched from a 3-minute periodic timer to a 1.5-second debounced trigger fired by Project::dataChanged / versionsChanged / linkedRomsChanged
- Welcome page recent-project logos load from disk cache after first launch — no network round-trip
- Linked ROMs and version snapshots actually persist now (the underlying serialization was correct; the modified flag was the bug)
การแปลภาษา
- All four language files at 100% translated — 1315 / 1315 finished entries in en, es, th, zh
- Live retranslation — switch language at runtime and the welcome page, status bar, update banner, and confirmation dialogs all rebuild in the new locale immediately
- Documentation site auto-discovers translations per section and shows a friendly "not yet translated — showing English" notice when a translation is missing
- Help + Documentation buttons in the welcome page pass the desktop locale to the docs site so the right language opens automatically
เบื้องหลัง
- Single source-of-truth version system — root /VERSION file is read by CMake, propagated via configure_file → version.h, and consumed by both the app and the installer; bump one file, everything else updates
- Design system module (uiwidgets.h / .cpp) — Theme tokens (palette, type scale, radii, spacing) + UI helpers (cards, header strips, primary / destructive / flat buttons, pills, form fields) so dialogs share one source of styling truth
- BrandLogo service — async fetch with three-tier cache (memory → disk → network), curated brand → slug map for ~70 manufacturers, falls back to a colored letter chip on miss
- Versions, linked ROMs, and modified flag are now correctly set across all mutation paths (Project::snapshotVersion, actLinkRom, actImportLinkedVersion)
แก้ไขข้อบกพร่อง
- Hex Comparison: ASCII column of the left pane no longer overlaps the address column of the right pane on narrow widths
- Welcome page: brand logos appear (the previous Clearbit-based source was discontinued; switched to an open-source GitHub-hosted dataset)
- Status bar "Ready" message + "Update available" banner now retranslate on language switch
เบต้า
1.0.0-beta1
รุ่นบำรุงรักษา แก้ไขการเปรียบเทียบเวอร์ชันของตัวตรวจสอบอัปเดต อัปเดตเวอร์ชันเป็นเบต้า ปรับปรุงตัวติดตั้งและสคริปต์การปล่อย
แก้ไขข้อบกพร่อง
- Update checker — alpha3 vs alpha4 comparison now compares the trailing version number correctly
- Version updated to 1.0.0-beta1
- Release script now stages the ChecksumDLL folder with all runtime dependencies
- Installer version synced with app version
อัลฟา
1.0.0-alpha3
OLS parser, ตัวจัดการ DTC, ฟังก์ชัน AI, ฐานข้อมูลรถ, i18n เต็มรูปแบบ
ฟีเจอร์หลัก
- OLS file import — universal ROM extraction, scaling, byte order detection
- DTC Manager: view, search and disable diagnostic trouble codes for Bosch ECUs
- AI Functions: one-click Decat, DPF, EGR, AdBlue, Swirl, Speed Limiter, Start-Stop
- AI map explain button in overlay with streaming Claude response
- Vehicle database: 7,300+ models, 954 ECUs, cascading brand / model / engine selector
- 3D Sim: slice planes, glowing intersections, mini heatmap, depth improvements
การปรับปรุง
- OLS ROM position via "Original" marker (verified with frida traces)
- OLS map scaling factors + axis scaling from binary record fields
- Display precision derived from scaling factor (matches WinOLS)
- Claude API URL now editable for custom endpoints
- JWT auto-refresh on startup + 402 auto-retry for seamless module provisioning
- Export ROM with version selector
- Enter key sends message in AI assistant — Shift+Enter for newline
- Intro wizard shown only on first launch
- HiDPI icon rendering for Apple Silicon (devicePixelRatio)
- Installer: license agreement with acceptance checkbox, uninstaller support
- AI assistant: ROM/version selector, better suggestion chips, visible API Key button
- AI settings page in app preferences
- Full i18n — 800+ translated strings in Chinese, Spanish and Thai
- Server: signature path fix, translation cache fuzzy matching, zh_CN normalization
นำเข้า OLS
- Universal map name detection via 0x0A marker pattern
- ROM size auto-detection from address patterns
- ROM position from "Original" version block field
- Byte order detection from "Hexdump" header field
- Map type classification (VALUE / CURVE / MAP) from record type field
- Dimension detection with multi-strategy search
- Axis address inference (stored before map data in ROM)
- Header parsing with compound blob support
ตัวแยกวิเคราะห์ A2L
- Fixed crash on large A2L files (74 MB+) — replaced regex with indexOf
- 64 MB thread stack for parser thread
- A2L–ROM compatibility scoring (EPK, axis headers, smoothness)
- Import results dialog with detailed stats
- Base address auto-detection for Continental / Simos ECUs
- Fixed base address override bug (BIN parser was overriding A2L detection)
ค้นหาแมพ
- Fuzzy subsequence matching in left panel filter
- Separator-agnostic search (underscores, dots, dashes stripped)
- Relevance-scored results sorted by match quality
คลื่น 2D
- Click-drag range selection with blue overlay
- Right-click context menu (Selection→Map, Value±1, Copy, Zoom)
- Auto-scroll when dragging near edges
- Create Map dialog from waveform selection
อื่นๆ
- Single-instance lock (QSharedMemory)
- showROM() called in loadProject — fixes blank 2D view on reopen
- Large project optimizations for projects with 5,000+ maps
อัลฟา
1.0.0-alpha2
นำเข้า OLS เบต้า, ค้นหาแบบ fuzzy, เลือก 2D, แก้ไขการหยุดทำงาน A2L
นำเข้า OLS
- Universal map name detection via 0x0A marker pattern
- ROM size auto-detection from address patterns
- ROM position from "Original" version block field
- Byte order detection from "Hexdump" header field
- Map type classification (VALUE / CURVE / MAP) from record type field
- Dimension detection with multi-strategy search
- Axis address inference (stored before map data in ROM)
- Header parsing with compound blob support
ตัวแยกวิเคราะห์ A2L
- Fixed crash on large A2L files (74 MB+) — replaced regex with indexOf
- 64 MB thread stack for parser thread
- A2L–ROM compatibility scoring (EPK, axis headers, smoothness)
- Import results dialog with detailed stats
- Base address auto-detection for Continental / Simos ECUs
- Fixed base address override bug (BIN parser was overriding A2L detection)
ค้นหาแมพ
- Fuzzy subsequence matching in left panel filter
- Separator-agnostic search (underscores, dots, dashes stripped)
- Relevance-scored results sorted by match quality
คลื่น 2D
- Click-drag range selection with blue overlay
- Right-click context menu (Selection→Map, Value±1, Copy, Zoom)
- Auto-scroll when dragging near edges
- Create Map dialog from waveform selection
อื่นๆ
- Single-instance lock (QSharedMemory)
- showROM() called in loadProject — fixes blank 2D view on reopen
- Large project optimizations for projects with 5,000+ maps
เวอร์ชันแรก
1.0.0-alpha1
เวอร์ชัน alpha เปิดตัวครั้งแรก
เวอร์ชันเปิดตัว
- A2L / ASAP2 parser with full COMPU_METHOD, axis and record layout support
- Interactive 2D table and 3D surface map viewer
- Real-time editing with diff comparison
- Binary compare — byte-level diff with map-aware highlighting
- Checksum correction for Bosch, Siemens and Denso ECUs
- Export to binary, Intel HEX and Motorola S-record
- AI assistant powered by Claude
- Multi-language UI — English, Thai, Chinese, Spanish
- Windows, macOS and Linux support