# Reference protocols -- OTDP 0.2.0

The accompanying examples are fully specified synthetic authoring targets. Values and limits here belong to these examples only; they are not the user's bench limits. `examples/reference-vectors.json` gives exact representative exchanges and results.

**reference-psu:** Raw TCP with LF at the descriptor's port. `*IDN?` returns `OTDP Reference,reference-psu,SIM001,1.0`. `VOLT n` sets a 0-10 V setpoint; `VOLT?` reads it. `OUTP 0/1` sets disabled/enabled; `OUTP?` reads it. `MEAS:VOLT?` returns the setpoint when enabled, otherwise zero. These synthetic settings are exact within the declared readback tolerance; write commands have no direct response. `*TST?` returns `0`; `SYST:ERR?` returns `0,"No error"` when empty. Initial output is disabled and setpoint zero. The model makes no claim about a physical protection circuit.

**reference-controller:** Native UART JSON exactly as §6.2. Identify returns OTDP Reference/reference-controller/SIM002/1.0. `battery_voltage` reads 4.01 V. `led_state` initially off and accepts off/red/green/blue; writes acknowledge the effective value. Self-test returns pass with an empty detail list. One subscription at a time is supported, with an interval of at least 100 ms; subscribed parameters emit their current values at that interval until unsubscribed. Subscription IDs and sequence follow §7. Unadvertised verbs return UNSUPPORTED. Malformed requests do not change state.

**reference-can:** Passive standard CAN frame ID 418, classic CAN, four bytes. Bytes 0-1 are unsigned big-endian hundredths of volts; bytes 2-3 are signed big-endian tenths of amps. `04 D2 FF 9C` therefore yields 12.34 V and −10 A. Frames older than 100 ms do not satisfy the example's read policy. Identity is commissioned and never queried on the bus.

**reference-capture:** A custom line protocol on the declared serial link, demonstrating why an adapter can be read-only yet support capture. `ID?\n` returns `OTDP Reference,reference-capture,SIM003,1.0\n`. `V?\n` returns `3300\n` in millivolts; the adapter reports 3.3 V. `CAP? n\n` accepts integer n=1…1024 and returns one LF-terminated comma-separated line of decimal samples `1,2,…,n`, in volts at a 0.001 s interval. `ERR\n` is a device rejection for an unsupported command/count. Capture starts when CAP is sent and has no cancellation command. A timeout after CAP is dispatched is unknown. The adapter converts exactly n finite numbers to waveform_f64le through the host artifact writer. Capture byte budget must accommodate n×8 before transmission. No escaping, checksums, unsolicited frames, streaming, reset or setters exist in this synthetic protocol. Connection loss requires a fresh host instance; no retry/replay is defined.
