fix(reader): correct the QR reader's identity — Dingtian DT-008, not "GEE"
Build desktop / desktop (push) Successful in 4m16s
Build & push images / images (push) Successful in 2m46s
CI / check (push) Successful in 38s

An early wrong assumption named the QR/RFID access reader "GEE" /
"GEE/Fondvision" / "GEE-QR-ER80" (and summarized a raw GEE PDF as its
datasheet). There is no GEE device — it's the Dingtian DT-008
(dingtian-tech.com/en_us/qr_code_reader.html), the same vendor as the relay
board, which is why it integrates the identical HTTP-GET-push way.

Code:
- Driver symbol geeQrReaderDriver → dingtianQrReaderDriver; label →
  "Dingtian DT-008 QR/RFID reader (HTTP push)"; comments/description rewritten
  to the real DT-008 facts (Wiegand 26/34, TCP/IP, USB, RS485 — not RS-232;
  QR/barcode + ID/IC/NFC — not DataMatrix/1D).
- Persisted driverId "gee-qr-reader" → "dingtian-qr-reader" (the registry
  lookup key + the row created on assign in qr-reader.ts).
- Migration 0015 rewrites existing devices.driver_id rows so configured readers
  keep resolving (applied to the dev DB — 2 rows; the booth applies it on boot).
  Behaviour is unchanged: naming + the persisted id only.

Wiki + memory:
- Renamed entities/gee-qr-er80.md → dingtian-dt008-reader.md and
  sources/gee-qr-er80.md → dingtian-dt008.md; rewrote both to the real DT-008
  product-page specs while KEEPING all the verified-on-hardware protocol facts
  (cjihao serial, .jsp path, Connection: close). Fixed every cross-reference +
  "GEE" mention in 6 other pages. Memory gee-reader-serial-binding →
  dingtian-reader-serial-binding. The only surviving "GEE" mentions are
  deliberate naming-correction notes, the raw PDF filename, and the
  append-only log history.

Full workspace build/lint/test green; dev DB readers verified resolving to the
registered dingtian-qr-reader driver.

Claude-Session: https://claude.ai/code/session_01Xcm6ikLgGoCxxHrxtjkk5V
This commit is contained in:
2026-06-28 17:39:15 +02:00
parent 96acd6b662
commit f6e35bbebf
20 changed files with 138 additions and 101 deletions
+37
View File
@@ -0,0 +1,37 @@
---
type: source
tags: [parking, hardware, readers, qr, dingtian, datasheet]
sources: [dingtian-dt008]
updated: 2026-06-28
---
# Source: Dingtian DT-008 QR Code Reader (product page)
Vendor product page for the **Dingtian DT-008** QR/barcode/RFID access reader —
https://www.dingtian-tech.com/en_us/qr_code_reader.html. This is the reader the project
actually has on hand for the [[ticket-encoding|QR ticket]] / RFID-[[subscription]] paths.
Entity: [[dingtian-dt008-reader]]. Same vendor as the [[dingtian-relay|Dingtian relay board]].
> **Supersedes a mis-identified source.** The project originally summarized
> `raw/GEE-QR-ER80 QR Code Access Control Reader.pdf` as if the reader were a "GEE-QR-ER80"
> (GEE NFC LIMITED). That was a wrong early assumption — the device is the Dingtian DT-008.
> Several facts in that PDF (RS-232, DataMatrix/1D, a Linux SDK) do **not** match the real
> hardware and were dropped. The HTTP-push protocol facts, however, were later **verified on the
> actual device** (see [[dingtian-dt008-reader]] "Verified on hardware").
## Key takeaways (DT-008 product page)
- **Scans:** QR / barcode (simple) **and** ID/IC/NFC cards. Read ~**0.2 s**, range **0–10 cm**.
- **Interfaces:** **Wiegand 26/34, TCP/IP, USB, RS485.** (For our integration: HTTP over TCP/IP.)
- **Power:** 9–16 V DC, 800 mA. **Size:** 86×86×42 mm. **Temp:** −30…70 °C.
- **Wiegand pinout:** Red(power), Black(GND), Green(D0), White(D1), Blue(LED), Yellow(BEEP).
- **Reporting:** "QR Code HTTP GET" — the reader HTTP-GETs a configured host on each scan; the host
replies the verdict (drives beep/output). Vendor ships a **QR Code config tool** + HTTP-GET demo
code (C++/C#/PHP) and an SDK (`QRCode_sdk.zip`). See [[qrcode-sdk]] for the protocol we implement.
## How we use it
Host-in-the-loop, synchronous HTTP: reader GETs `/qa/mcardsea.<ext>` with its serial (`cjihao`);
our endpoint (`apps/server/src/routes/qr-reader.ts`) decides and replies the SDK verdict, and emits
a `read` event for the access flows. Full integration + the on-hardware findings (the `.jsp` path
extension, `Connection: close` requirement, serial resolution) are in [[dingtian-dt008-reader]].
-37
View File
@@ -1,37 +0,0 @@
---
type: source
tags: [parking, hardware, readers, qr, datasheet]
sources: [gee-qr-er80]
updated: 2026-06-16
---
# Source: GEE-QR-ER80 QR Code Access Control Reader (datasheet)
Vendor datasheet (GEE NFC LIMITED, ©2007–2019) for the **GEE-QR-ER80** — a static
**QR-code access-control reader**, optional ID/IC card. The reader the project has
on hand for the [[ticket-encoding|QR ticket]] path. Raw:
`raw/GEE-QR-ER80 QR Code Access Control Reader.pdf` (3 pages). Entity: [[gee-qr-er80]].
## Key takeaways
- **Optical scanner**, not a prox-card reader: reads **QR, DataMatrix, 1D barcode** (static).
Optional add-ons for **IC card UID / ID card**.
- **Multi-interface:** **Wiegand 26/34, RS-232, RS-485, USB, TCP/IP** — selectable by variant.
- **Power:** 4–15 VDC, < 800 mA. **Read direction:** 360°. Built-in scanner LED.
- **OS:** Windows XP/7/8/10 **and Linux** (explicit) — fits the [[disk-os-hardening|Linux appliance]].
- **Wiring (Wiegand/RS-232/485 variant):** VCC(+12V), GND, **D0/D1** (Wiegand), **TX/R+ , RX/R-**
(RS-232 / RS-485), plus **LED** and **BEEP** control lines (host can drive feedback).
- **Order code** `GEE-QR-ER80-<scanner>-<interface>`: `Q`=QR scanner / `D`=ID reader / `C`=IC reader;
`W`=WG·RS232·RS485 / `U`=USB / `T`=RJ45 (TCP/IP). **On hand: `-Q-W`** (QR scanner; Wiegand/RS-232/RS-485).
## Section map
- p1 — overview, physical + feature table (interfaces, power, read direction).
- p2 — supported types (QR/DM/1D + optional IC/ID), OS, environment; **wire definition** (pin table).
- p3 — order-code breakdown, applications (access control / vacation rentals / time attendance).
## Not in this datasheet (open)
- The **RS-232/RS-485 data protocol**: baud rate, frame format, and whether a QR scan is emitted as
an **ASCII string** (expected) vs. some framed protocol. Decides the host-side adapter — see
[[gee-qr-er80]] open questions. Resolve by vendor docs or by observing the port on a scan.
+4 -4
View File
@@ -5,13 +5,13 @@ sources: [qrcode-sdk]
updated: 2026-06-16
---
# Source: QRCode SDK v1.6.5 (GEE/Dingtian QR reader)
# Source: QRCode SDK v1.6.5 (Dingtian DT-008 QR reader)
Vendor SDK for the QR access reader ([[gee-qr-er80]]; also branded Dingtian). Defines the
Vendor SDK for the QR access reader (the Dingtian [[dingtian-dt008-reader]]). Defines the
reader↔server **HTTP protocol** — the missing piece the datasheet omitted. Files at
`QRCode_sdk - QRCode_v1_6_5/sdk/` (config tool `QRCode_v1_6_5.exe`, demos in C#/PHP/VC++, protocol
docs `readme.txt`, `qrcode_HTTP_GET.txt`, `VC++/how to.txt`). **Not copied into `raw/`** — bulky +
binaries; this summary is the faithful capture. Entity: [[gee-qr-er80]].
binaries; this summary is the faithful capture. Entity: [[dingtian-dt008-reader]].
## The protocol — HTTP GET poll, server replies the verdict
@@ -52,7 +52,7 @@ GET /qa/mcardsea.php?cardid=445D2C&mjihao=1&cjihao=HW256097&status=11&time=15404
This is **host-in-the-loop, synchronous**: the GET *is* the access query; our JSON reply *is* the
decision. So the backend endpoint must **decide (valid/invalid + direction) and reply** — richer
than a fire-and-forget read. Direction comes from the `status` low digit. See [[gee-qr-er80]] +
than a fire-and-forget read. Direction comes from the `status` low digit. See [[dingtian-dt008-reader]] +
[[device-input-flow]].
## Defaults / misc