Summary
The WolfVision VZ-C12, VZ-C12², VZ-C12³, VZ-C32 and VZ-C32³ are ceiling-mounted Visualizers (document cameras) controllable over RS-232 serial via a single-byte command protocol. The protocol is split across two command pages (page 0 standard, page 1 extended) and supports zoom, focus, iris, light, power, presets, image manipulation, output resolution, and reply-mode control.
Transport
protocols:
- serial
serial:
baud_rate: 115200
data_bits: 8
parity: none
stop_bits: 1
flow_control: none # inferred: source states 3-wire connection (pins 2/3/5 only); no RTS/CTS
auth:
type: none # inferred: no auth procedure in source
Default baud 115200; older units default 19200. Selectable: 9600, 19200, 38400, 57600, 115200 (changed only via ExtraMenu → Serial Port; no RS-232 command changes baud). 9-pin Sub-D: pins 2 (RxD), 3 (TxD), 5 (GND) only.
Traits
- powerable # power on/off/toggle commands present
- levelable # zoom, focus, iris, brightness, light, lamp
- queryable # many Get state queries
- routable # intern/extern image switch, video format, resolution
Actions
# -------- Page commands --------
- id: select_page_0
label: Select Command Page 0
kind: action
command: "30"
params: []
notes: "Page 0 is the default standard page; auto-selected on power on."
- id: select_page_1
label: Select Command Page 1
kind: action
command: "31"
params: []
notes: "After the next control command is executed, device auto-returns to page 0."
# -------- Zoom Control (page 0) --------
- id: zoom_wide
label: Zoom Wide
kind: action
command: "C3"
params: []
notes: "Repeat at min 10Hz for continuous zoom. Switches on Auto-Iris."
- id: zoom_tele
label: Zoom Tele
kind: action
command: "C7"
params: []
notes: "Repeat at min 10Hz for continuous zoom. Switches on Auto-Iris."
- id: start_zoom_wide
label: Start Zoom Wide
kind: action
command: "81"
params: []
notes: "Runs until Stop Zoom/Focus/Iris (80) or mechanical end-position."
- id: start_zoom_tele
label: Start Zoom Tele
kind: action
command: "82"
params: []
notes: "Runs until Stop Zoom/Focus/Iris (80) or mechanical end-position."
- id: stop_zoom_focus_iris
label: Stop Zoom/Focus/Iris
kind: action
command: "80"
params: []
notes: "Stops zoom, focus, iris, and mirror movement. (Page 1 byte 80 = Toggle Intern/Extern.)"
- id: get_zoom_position
label: Get Zoom Position
kind: query
command: "A1"
params: []
notes: "Returns 3-digit hex '000' (wide) to 'FFF' (tele) + LF + CR."
- id: set_zoom_position
label: Set Zoom Position
kind: action
command: "A2 {pos}"
params:
- name: pos
type: string
description: 3-digit hex position '000' (wide) to 'FFF' (tele), no CR/LF
notes: "Device echoes '?' first; send 3-digit hex within 3 seconds. Not all 000-FFF positions are supported."
# -------- Focus Control (page 0) --------
- id: focus_far
label: Focus Far
kind: action
command: "C2"
params: []
notes: "Repeat at min 10Hz for continuous focus."
- id: focus_near
label: Focus Near
kind: action
command: "C6"
params: []
notes: "Repeat at min 10Hz for continuous focus."
- id: start_focus_far
label: Start Focus Far
kind: action
command: "83"
params: []
notes: "Runs until Stop (80) or end-position."
- id: start_focus_near
label: Start Focus Near
kind: action
command: "84"
params: []
notes: "Runs until Stop (80) or end-position."
- id: get_focus_position
label: Get Focus Position
kind: query
command: "A3"
params: []
notes: "Returns 3-digit hex '000' (near) to 'FFF' (far) + LF + CR. (Page 1 byte A3 = Set Digital Zoom.)"
- id: set_focus_position
label: Set Focus Position
kind: action
command: "A4 {pos}"
params:
- name: pos
type: string
description: 3-digit hex focus position '000' (near) to 'FFF' (far), no CR/LF
notes: "Device echoes '?' first; send 3-digit hex within 3 seconds. (Page 1 byte A4 = Get Digital Zoom.)"
- id: one_push_auto_focus
label: One-Push Auto Focus
kind: action
command: "F9"
params: []
# -------- Iris Control (page 0) --------
- id: iris_open
label: Iris Open / Brightness Up
kind: action
command: "C1"
params: []
notes: "Repeat at min 10Hz. Switches off Auto Iris."
- id: iris_close
label: Iris Close / Brightness Down
kind: action
command: "C5"
params: []
notes: "Repeat at min 10Hz. Switches off Auto Iris."
- id: start_iris_open
label: Start Iris Open
kind: action
command: "85"
params: []
notes: "Runs until Stop (80)."
- id: start_iris_close
label: Start Iris Close
kind: action
command: "86"
params: []
notes: "Runs until Stop (80)."
- id: auto_iris_on
label: Auto Iris On
kind: action
command: "A7"
params: []
- id: auto_iris_off
label: Auto Iris Off
kind: action
command: "A8"
params: []
- id: get_auto_iris
label: Get Auto Iris
kind: query
command: "A6"
params: []
notes: "Returns '1' (on) or '0' (off) + LF + CR."
- id: get_iris_position
label: Get Iris Position
kind: query
command: "A5"
params: []
notes: "Returns 3-digit hex '000' (close) to 'FFF' (open) + LF + CR."
- id: set_iris_position
label: Set Iris Position
kind: action
command: "A9 {pos}"
params:
- name: pos
type: string
description: 3-digit hex iris position '000' (close) to 'FFF' (open), no CR/LF
notes: "Device echoes '?' first; send 3-digit hex within 3 seconds."
# -------- Light On/Off (page 0) --------
- id: light_off
label: Light Off
kind: action
command: "CD"
params: []
- id: light_on
label: Light On
kind: action
command: "B2"
params: []
- id: get_light
label: Get Light On or Off
kind: query
command: "AC"
params: []
notes: "Returns '1' (on) or '0' (off) + LF + CR."
- id: lamp_change
label: Lamp Change
kind: action
command: "B1"
params: []
notes: "Replies 'Perform Lampchange... Changed to Lamp1 (or Lamp2)'. Requires firmware v1.30a+."
# -------- Power / Presets (page 0) --------
- id: power_on_factory_preset
label: Power On / Recall Factory Preset
kind: action
command: "C8"
params: []
notes: "Powers on from standby; if already on, recalls factory preset (approx DIN A5, light on)."
- id: power_off
label: Power Off (Standby)
kind: action
command: "C9"
params: []
- id: get_power
label: Get Power On or Off
kind: query
command: "AB"
params: []
notes: "Returns '1' (on) or '0' (standby) + LF + CR."
- id: power_toggle
label: Power Toggle
kind: action
command: "BA"
params: []
notes: "Toggles between on and off. Main power switch must be on."
- id: recall_preset
label: Recall Preset
kind: action
command: "9A {slot}"
params:
- name: slot
type: string
description: Preset number 1-9 (single ASCII digit)
notes: "Device echoes '?' first; send ASCII digit within 3 seconds. (Page 1 byte 9A = Get Positive/Negative.)"
- id: store_preset
label: Store Preset
kind: action
command: "9B {slot}"
params:
- name: slot
type: string
description: Preset number 1-9 (single ASCII digit)
notes: "Device echoes '?' first; send ASCII digit within 3 seconds. (Page 1 byte 9B = Switch Color On.)"
- id: preset_0_factory
label: Preset 0 (Factory Preset)
kind: action
command: "D5"
params: []
notes: "Recalls the Factory Preset (approx DIN A5, light on)."
- id: preset_1
label: Preset 1
kind: action
command: "CA"
params: []
- id: preset_2
label: Preset 2
kind: action
command: "CB"
params: []
- id: preset_3
label: Preset 3
kind: action
command: "FD"
params: []
- id: save_preset_1
label: Save Preset 1
kind: action
command: "D8"
params: []
- id: save_preset_2
label: Save Preset 2
kind: action
command: "D9"
params: []
- id: save_preset_3
label: Save Preset 3
kind: action
command: "FE"
params: []
- id: preset_max_wide
label: Preset Max Wide
kind: action
command: "E5"
params: []
notes: "Zooms to max wide, light on. Pre-defined, not modifiable."
- id: preset_din_a4
label: Preset DIN A4
kind: action
command: "E6"
params: []
notes: "Zooms to approx DIN A4, light on. Pre-defined."
- id: preset_din_a5
label: Preset DIN A5
kind: action
command: "E7"
params: []
notes: "Zooms to approx DIN A5, light on. Pre-defined."
- id: preset_din_a6
label: Preset DIN A6
kind: action
command: "E8"
params: []
notes: "Zooms to approx DIN A6, light on. Pre-defined."
- id: preset_din_a7
label: Preset DIN A7
kind: action
command: "E9"
params: []
notes: "Zooms to approx DIN A7, light on. Pre-defined."
- id: preset_din_a8
label: Preset DIN A8
kind: action
command: "EA"
params: []
notes: "Zooms to approx DIN A8, light on. Pre-defined."
- id: preset_max_tele
label: Preset Max Tele
kind: action
command: "EB"
params: []
notes: "Zooms to max tele, light on. Pre-defined."
- id: preset_slide
label: Preset Slide
kind: action
command: "EC"
params: []
notes: "Zooms to approx slide-film size, light off. Pre-defined."
- id: preset_xray_din_a4
label: Preset X-ray DIN A4
kind: action
command: "ED"
params: []
notes: "Zooms to approx DIN A4. Pre-defined."
- id: preset_xray_din_a5
label: Preset X-ray DIN A5
kind: action
command: "EE"
params: []
notes: "Zooms to approx DIN A5. Pre-defined."
# -------- Visualizer Menu / Camera Control (page 0) --------
- id: unlock_visualizer_menu
label: Unlock Visualizer Menu
kind: action
command: "DA"
params: []
notes: "After this, menu can be entered with command CE."
- id: visualizer_menu_toggle
label: Visualizer Menu On/Off
kind: action
command: "CE"
params: []
notes: "If menu is locked, send at 10Hz for 1 second to unlock."
- id: unlock_extra_menu
label: Unlock Extra Menu (Baud Rate)
kind: action
command: "8B"
params: []
notes: "After this, menu can be entered with command CE to access Serial Port sub-menu for baud change. (Page 1 byte 8B = Get Show All.)"
- id: function_up
label: Function Up (Menu Cursor Up)
kind: action
command: "D0"
params: []
- id: function_down
label: Function Down (Menu Cursor Down)
kind: action
command: "D1"
params: []
- id: data_right_white_balance
label: Data Right / White Balance
kind: action
command: "D2"
params: []
notes: "In menu: increments current item. Outside menu: triggers white balance."
- id: white_balance
label: White Balance
kind: action
command: "97"
params: []
notes: "Performs white balance. Also works when menu is on. (Page 1 byte 97 = Switch Positive On.)"
- id: data_left_text_enhancer_toggle
label: Data Left / Text Enhancer Toggle
kind: action
command: "D3"
params: []
notes: "In menu: decrements current item. Outside menu: toggles Text Enhancer."
- id: text_enhancer_toggle
label: Text Enhancer On/Off
kind: action
command: "96"
params: []
notes: "Toggles text enhancement. Also works when menu is on. (Page 1 byte 96 = Get Video.)"
- id: help
label: Help (Menu Description)
kind: action
command: "D6"
params: []
notes: "Outputs description of current menu setting via RS-232."
- id: data_left_right_default
label: Data Left + Data Right (Default Value)
kind: action
command: "DC"
params: []
notes: "Resets current menu item to its default value."
- id: reset_menu
label: Reset Menu
kind: action
command: "F6"
params: []
notes: "Resets all Visualizer settings except output settings."
- id: custom_serial_mode_on
label: Custom Serial Mode On
kind: action
command: "F1"
params: []
notes: "On-screen menu can be navigated via D0/D1/D2/D3; current line is echoed via RS-232 (+ LF + CR). Powering off deactivates. Requires firmware v1.30a+."
- id: custom_serial_mode_off
label: Custom Serial Mode Off
kind: action
command: "F2"
params: []
notes: "Requires firmware v1.30a+."
# -------- Reply Mode Control (page 0) --------
- id: reply_mode_off
label: Reply Mode Off
kind: action
command: "9C"
params: []
notes: "Default after mains power on. No reply sent for commands. (Page 1 byte 9C = Switch B/W On.)"
- id: reply_mode_one_byte
label: Reply Mode One Byte
kind: action
command: "9D"
params: []
notes: "Replies $06 for valid command, $0F for invalid. (Page 1 byte 9D = Get B/W.)"
- id: reply_mode_two_bytes
label: Reply Mode Two Bytes
kind: action
command: "9E"
params: []
notes: "Replies received byte + $06 (valid) or received byte + $0F (invalid). (Page 1 byte 9E = Text Enhancer On.)"
- id: reply_mode_string
label: Reply Mode String
kind: action
command: "9F"
params: []
notes: "Replies 'OKAY' + LF + CR (valid) or 'ERROR' + LF + CR (invalid). (Page 1 byte 9F = Text Enhancer Off.)"
# -------- Miscellaneous (page 0 unless noted) --------
- id: blank_echo
label: Blank Echo (Ready Check)
kind: query
command: "20"
params: []
notes: "ASCII space. Echoes a blank (' ') if device is ready to receive next command; no echo if busy. Use between long-running commands."
- id: get_version
label: Get Visualizer Type and Software Version
kind: query
command: "76"
params: []
notes: "ASCII 'v'. Returns e.g. 'VZ-C32 V1.12b' + LF + CR."
- id: debug_mode_on
label: Debug Mode On
kind: action
command: "FA"
params: []
notes: "Required for command 3F (Camera Status)."
- id: get_camera_status
label: Get Camera and Optic Status
kind: query
command: "3F"
params: []
notes: "ASCII '?'. Debug only. Returns multi-line camera/optics state. Format depends on model/firmware."
- id: ascii_text_input
label: ASCII Text Input Mode
kind: action
command: "5F"
params: []
notes: "ASCII '_'. Device echoes '?'; send 3-digit decimal command within 3 seconds. Useful for terminal testing."
- id: key_lock_on
label: Key Lock On
kind: action
command: "AF"
params: []
notes: "IR remote and front-panel keys disabled; RS-232 still active. (Page 1 byte AF = DVI Resolution AUTO.)"
- id: key_lock_off
label: Key Lock Off
kind: action
command: "B0"
params: []
- id: get_key_lock
label: Get Key Lock
kind: query
command: "AE"
params: []
notes: "Returns '1' (active) or '0' (inactive) + LF + CR. (Page 1 byte AE = DVI Resolution Down.)"
- id: get_status
label: Get Status
kind: query
command: "A0"
params: []
notes: "Returns single-line status string with all settings. Format depends on model/firmware. (Page 1 byte A0 = Get Text Enhancer.)"
- id: switch_ir_mode
label: Switch IR Mode
kind: action
command: "DD"
params: []
notes: "Cycles through IR modes A, B, C, D for use with multiple co-located units."
- id: demo_mode
label: Demo Mode
kind: action
command: "F4"
params: []
notes: "Device runs demo sequence. Exit by sending any code or pressing any key."
# -------- Intern/Extern Switch (page 1) --------
- id: toggle_intern_extern
label: Toggle Switch Intern/Extern
kind: action
command: "80"
params: []
notes: "Page 1. Toggles between Visualizer image and Extern input. (Page 0 byte 80 = Stop Zoom/Focus/Iris.)"
- id: extern_signal_on
label: Switch Extern Signal On
kind: action
command: "81"
params: []
notes: "Page 1. (Page 0 byte 81 = Start Zoom Wide.)"
- id: intern_signal_on
label: Switch Intern Signal On
kind: action
command: "82"
params: []
notes: "Page 1. (Page 0 byte 82 = Start Zoom Tele.)"
- id: get_extern
label: Get Extern Signal
kind: query
command: "83"
params: []
notes: "Page 1. Returns '1' (active) or '0' (inactive) + LF + CR. (Page 0 byte 83 = Start Focus Far.)"
# -------- Image Turn (page 1) --------
- id: switch_portrait_toggle
label: Switch Portrait On/Off
kind: action
command: "84"
params: []
notes: "Page 1. Toggles image turn mode (portrait/landscape). (Page 0 byte 84 = Start Focus Near.)"
- id: portrait_on
label: Portrait On
kind: action
command: "85"
params: []
notes: "Page 1. Activates image turn (+/-90° or 180° per menu setting). (Page 0 byte 85 = Start Iris Open.)"
- id: portrait_off
label: Portrait Off
kind: action
command: "86"
params: []
notes: "Page 1. (Page 0 byte 86 = Start Iris Close.)"
- id: get_portrait
label: Get Portrait
kind: query
command: "87"
params: []
notes: "Page 1. Returns '0' (0°), '1' (-90°), '2' (180°), '3' (+90°), + LF + CR. Pre-firmware v2.03a: '1' (on) or '0' (off)."
# -------- Video Output (page 1) --------
- id: video_pal
label: Video PAL
kind: action
command: "94"
params: []
notes: "Page 1. Not available on VZ-C12²."
- id: video_ntsc
label: Video NTSC
kind: action
command: "95"
params: []
notes: "Page 1. Not available on VZ-C12²."
- id: get_video
label: Get Video Format
kind: query
command: "96"
params: []
notes: "Page 1. Returns 'PAL' or 'NTSC' + LF + CR. Not available on VZ-C12². (Page 0 byte 96 = Text Enhancer On/Off.)"
# -------- Output Resolution (page 1) --------
- id: resolution_up
label: Resolution Up (Both Outputs)
kind: action
command: "90"
params: []
- id: resolution_down
label: Resolution Down (Both Outputs)
kind: action
command: "91"
params: []
- id: resolution_xga_75
label: Resolution XGA/75 (Both Outputs)
kind: action
command: "92"
params: []
notes: "Per source description, sets both outputs to AUTO-detect."
- id: get_resolution_vga
label: Get VGA Resolution
kind: query
command: "93"
params: []
notes: "Returns e.g. 'XGA at 75Hz' + LF + CR."
- id: vga_resolution_up
label: VGA Resolution Up
kind: action
command: "AA"
params: []
- id: vga_resolution_down
label: VGA Resolution Down
kind: action
command: "AB"
params: []
notes: "(Page 0 byte AB = Get Power.)"
- id: vga_resolution_auto
label: VGA Resolution Auto
kind: action
command: "AC"
params: []
notes: "(Page 0 byte AC = Get Light.)"
- id: get_resolution_dvi
label: Get DVI Resolution
kind: query
command: "A9"
params: []
notes: "Returns e.g. 'XGA/75Hz' + LF + CR."
- id: dvi_resolution_up
label: DVI Resolution Up
kind: action
command: "AD"
params: []
- id: dvi_resolution_down
label: DVI Resolution Down
kind: action
command: "AE"
params: []
notes: "(Page 0 byte AE = Get Key Lock.)"
- id: dvi_resolution_auto
label: DVI Resolution Auto
kind: action
command: "AF"
params: []
notes: "(Page 0 byte AF = Key Lock On.)"
# -------- Output Signal Setting (page 1) --------
- id: switch_positive_on
label: Switch Positive On
kind: action
command: "97"
params: []
notes: "Page 1. (Page 0 byte 97 = White Balance.)"
- id: switch_negative_on
label: Switch Negative On
kind: action
command: "98"
params: []
notes: "Page 1."
- id: switch_negative_blue_on
label: Switch Negative Blue On
kind: action
command: "99"
params: []
notes: "Page 1."
- id: get_positive_negative
label: Get Positive/Negative
kind: query
command: "9A"
params: []
notes: "Page 1. Returns '0' (positive), '1' (negative), '2' (negative/blue) + LF + CR. (Page 0 byte 9A = Recall Preset.)"
- id: switch_color_on
label: Switch Color On
kind: action
command: "9B"
params: []
notes: "Page 1. (Page 0 byte 9B = Store Preset.)"
- id: switch_black_white_on
label: Switch Black/White On
kind: action
command: "9C"
params: []
notes: "Page 1. (Page 0 byte 9C = Reply Mode Off.)"
- id: get_black_white
label: Get Black/White
kind: query
command: "9D"
params: []
notes: "Page 1. Returns '0' (color) or '1' (B/W) + LF + CR. (Page 0 byte 9D = Reply One Byte.)"
# -------- Text Enhancer (page 1) --------
- id: text_enhancer_on
label: Text Enhancer On
kind: action
command: "9E"
params: []
notes: "Page 1. (Page 0 byte 9E = Reply Two Bytes.)"
- id: text_enhancer_off
label: Text Enhancer Off
kind: action
command: "9F"
params: []
notes: "Page 1. (Page 0 byte 9F = Reply String.)"
- id: get_text_enhancer
label: Get Text Enhancer
kind: query
command: "A0"
params: []
notes: "Page 1. Returns '1' (active) or '0' (inactive) + LF + CR. (Page 0 byte A0 = Get Status.)"
# -------- Digital Zoom (page 1) --------
- id: set_digital_zoom
label: Set Digital Zoom
kind: action
command: "A3 {pos}"
params:
- name: pos
type: string
description: 3-digit hex digital zoom position '000' (wide) to 'FFF' (tele), no CR/LF
notes: "Page 1. Device echoes '?' first; send 3-digit hex within 3 seconds. (Page 0 byte A3 = Get Focus Position.)"
- id: get_digital_zoom
label: Get Digital Zoom
kind: query
command: "A4"
params: []
notes: "Page 1. Returns 3-digit hex '000' to 'FFF' + LF + CR. (Page 0 byte A4 = Set Focus Position.)"
# -------- Image Storing (page 1 except Freeze toggle) --------
- id: memory_store
label: Memory Store
kind: action
command: "8C {slot}"
params:
- name: slot
type: string
description: Memory number 1-9 (single ASCII digit)
notes: "Page 1. Device echoes '?' first; send ASCII digit within 3 seconds."
- id: memory_recall
label: Memory Recall
kind: action
command: "8D {slot}"
params:
- name: slot
type: string
description: Memory number 1-9 (single ASCII digit)
notes: "Page 1. Device echoes '?' first; send ASCII digit within 3 seconds."
- id: memory_off
label: Memory Off (Live Image)
kind: action
command: "8E"
params: []
notes: "Page 1. Switches to live image."
- id: snapshot
label: Snapshot (Store All Memories Sequentially)
kind: action
command: "8F"
params: []
notes: "Page 1. Stores one memory after another until all 9 are stored."
- id: show_all_toggle
label: Show All On/Off
kind: action
command: "88"
params: []
notes: "Page 1. Toggles showing all stored images simultaneously."
- id: show_all_on
label: Show All On
kind: action
command: "89"
params: []
notes: "Page 1."
- id: show_all_off
label: Show All Off
kind: action
command: "8A"
params: []
notes: "Page 1."
- id: get_show_all
label: Get Show All
kind: query
command: "8B"
params: []
notes: "Page 1. Returns '1' (active) or '0' (inactive) + LF + CR. (Page 0 byte 8B = Unlock Extra Menu.)"
- id: erase_memory
label: Erase All Memories
kind: action
command: "A5"
params: []
notes: "Page 1."
- id: freeze_toggle
label: Freeze On/Off
kind: action
command: "D7"
params: []
notes: "Page 0. Toggles freeze mode."
- id: freeze_on
label: Freeze On
kind: action
command: "A6"
params: []
notes: "Page 1."
- id: freeze_off
label: Freeze Off
kind: action
command: "A7"
params: []
notes: "Page 1."
- id: get_freeze
label: Get Freeze
kind: query
command: "A8"
params: []
notes: "Page 1. Returns '1' (frozen) or '0' (live) + LF + CR."
# -------- Image On/Off (page 0) --------
- id: image_toggle
label: Image Toggle On/Off
kind: action
command: "B9"
params: []
- id: image_on
label: Image On
kind: action
command: "C0"
params: []
- id: image_off
label: Image Off
kind: action
command: "C4"
params: []
Feedbacks
- id: power_state
type: enum
values: [on, standby]
notes: "From command AB (page 0)."
- id: light_state
type: enum
values: [on, off]
notes: "From command AC (page 0)."
- id: zoom_position
type: string
notes: "3-digit hex '000' (wide) to 'FFF' (tele) from command A1."
- id: focus_position
type: string
notes: "3-digit hex '000' (near) to 'FFF' (far) from command A3 (page 0)."
- id: digital_zoom_position
type: string
notes: "3-digit hex '000' to 'FFF' from command A4 (page 1)."
- id: iris_position
type: string
notes: "3-digit hex '000' (close) to 'FFF' (open) from command A5."
- id: auto_iris_state
type: enum
values: [on, off]
notes: "From command A6."
- id: text_enhancer_state
type: enum
values: [on, off]
notes: "From command A0 (page 1)."
- id: extern_state
type: enum
values: [active, inactive]
notes: "From command 83 (page 1)."
- id: portrait_state
type: enum
values: ["0_deg", "minus_90_deg", "180_deg", "plus_90_deg"]
notes: "From command 87. Pre firmware v2.03a: binary on/off."
- id: video_format
type: enum
values: [PAL, NTSC]
notes: "From command 96 (page 1). Not on VZ-C12²."
- id: vga_resolution
type: string
notes: "Free-form resolution string from command 93 (page 1)."
- id: dvi_resolution
type: string
notes: "Free-form resolution string from command A9 (page 1)."
- id: positive_negative_mode
type: enum
values: [positive, negative, negative_blue]
notes: "From command 9A (page 1)."
- id: black_white_mode
type: enum
values: [color, black_white]
notes: "From command 9D (page 1)."
- id: show_all_state
type: enum
values: [on, off]
notes: "From command 8B (page 1)."
- id: freeze_state
type: enum
values: [frozen, live]
notes: "From command A8 (page 1)."
- id: key_lock_state
type: enum
values: [locked, unlocked]
notes: "From command AE (page 0)."
- id: status_dump
type: string
notes: "Single-line all-settings string from command A0 (page 0). Format depends on model/firmware."
- id: version_info
type: string
notes: "From command 76: e.g. 'VZ-C32 V1.12b'."
- id: camera_status
type: string
notes: "Multi-line debug status from command 3F (requires debug mode FA)."
Variables
# UNRESOLVED: source does not expose continuous settable variables; all state
# is driven by action commands and observed via query commands. No section to populate.
Events
# UNRESOLVED: source does not describe unsolicited events. The device replies
# to commands in the enabled reply mode but does not spontaneously push state
# changes. Custom Serial Mode echoes the currently-marked on-screen menu line
# on Data commands; treat that as command-driven, not event-driven.
Macros
# UNRESOLVED: source does not describe device-side macros. The Height
# Adjustment procedure (firmware v1.30a+, Custom Serial Mode) is a
# 4-step sequence the controller drives; it is a controller-side macro,
# not a device feature, so it is not enumerated here.
Safety
confirmation_required_for: []
interlocks: []
# UNRESOLVED: source contains no explicit safety warnings, interlocks, or
# power-on sequencing requirements. Relevant procedural notes from the source:
# - The main power switch on the unit must be on before power_toggle (BA)
# can take effect.
# - Presets D5/E5-EE zoom to mechanical end-positions; physical clearances
# around the working surface are the installer's responsibility.
# - Lamp Change (B1) is a service operation; the source does not state
# cooldown or replacement procedure details.
Notes
Two-page command protocol — the most important quirk. Many opcode bytes are reused with different meanings on page 0 vs page 1. Page 0 is the default after power on; page 1 must be explicitly selected (command 31) and the device auto-returns to page 0 after the next control command. An implementation MUST track the current page or behavior is undefined.
Reused opcodes (page 0 → page 1):
80: Stop Zoom/Focus/Iris → Toggle Intern/Extern81: Start Zoom Wide → Extern On82: Start Zoom Tele → Intern On83: Start Focus Far → Get Extern84: Start Focus Near → Portrait Toggle85: Start Iris Open → Portrait On86: Start Iris Close → Portrait Off8B: Unlock Extra Menu → Get Show All96: Text Enhancer Toggle → Get Video97: White Balance → Switch Positive On9A: Recall Preset → Get Positive/Negative9B: Store Preset → Switch Color On9C: Reply Mode Off → Switch B/W On9D: Reply One Byte → Get B/W9E: Reply Two Bytes → Text Enhancer On9F: Reply String → Text Enhancer OffA0: Get Status → Get Text EnhancerA3: Get Focus Position → Set Digital ZoomA4: Set Focus Position → Get Digital ZoomAB: Get Power → VGA Resolution DownAC: Get Light → VGA Resolution AutoAE: Get Key Lock → DVI Resolution DownAF: Key Lock On → DVI Resolution AUTO
Reply modes. Default after mains power on is "no reply" (command 9C).
Use 9D / 9E / 9F to enable byte / two-byte / string reply modes.
The selected reply mode also applies to the command that selected it, so
9E itself receives a two-byte reply, and 9C receives no reply.
Baud rate. Default 115200; older units default 19200. Selectable:
9600, 19200, 38400, 57600, 115200. Changed only via ExtraMenu → Serial
Port (requires Unlock Extra Menu 8B on page 0, then Visualizer Menu
CE). There is no RS-232 command to change baud rate.
Set / Recall commands with parameters. Commands that take a 3-digit
hex value (set zoom / focus / iris / digital zoom position) or an ASCII
digit 1–9 (recall/store preset, memory store/recall) first echo a single
? byte and then expect the parameter within 3 seconds. No CR or LF
terminator is sent or expected.
Position ranges are not contiguous. Not all 000–FFF codes are mechanically supported (source calls these "missing codes"). Reading a position returns the exact code; setting moves to the nearest supported position.
Timing. Several commands have long execution time (zoom, focus moves,
height adjustment, demo mode). Send Blank Echo (20, ASCII space)
between commands; the device echoes a blank when ready to accept the
next command.
Custom Serial Mode (firmware v1.30a+, commands F1/F2) is a
meta-mode where each Data up/down/left/right command echoes the currently
marked on-screen menu line back over RS-232. Used for the Height
Adjustment install procedure. Powering the unit off deactivates it.
Firmware dependencies stated in source:
- v1.20a: new resolutions added (XGA 16:9, WXGA/60, WSXGA/60, 720p/50, 720p/60, 1080p/50, 1080p/60).
- v1.30a: Custom Serial Mode (F1/F2) and Lamp Change command (B1).
- v2.03a: Get Portrait (87) returns 4-state angle code; SXGA+ resolution changes from 1360×1024 to 1400×1050.
- v2.04a: extended debug camera status output format (command
3F).
Connection. 9-pin Sub-D; pins 2 (RxD), 3 (TxD), 5 (GND) only. No hardware flow control, no XON/XOFF mentioned.
Compatibility caveat from source. This protocol is "upward compatible to the one of the VZ-27plus/57plus except arm functions." The source does NOT enumerate which commands fail on the older VZ-27plus/57plus vs succeed on the VZ-C12/C12²/C32 — implementations targeting multiple series may need to test-and-skip.
Extended command set. VZ-C12² (s/n 1009412+) and VZ-C32 (s/n 1011797+)
support an extended WolfVision command list at
http://www.wolfvision.com/wolf/protocol_command_wolfvision/protocol_command.htm,
which is NOT included in this document.
Preset behaviour. Pre-defined presets (D5, E5–EE) are not modifiable and always set focus to the working plate, Auto Iris on, image on, Text Enhancer off, with light on (except Slide preset EC which has light off). User presets (recall 1–3 / save 1–3) store and recall: Zoom-Position, Focus-Position, Auto Iris on/off, Iris-Position (if AI off), Image on/off, Light on/off, Text Enhancer on/off.
Provenance
source_domains:
- wolfvision.com
source_urls:
- https://wolfvision.com/wolf/serial_ceiling32.pdf
retrieved_at: 2026-04-30T04:32:44.618Z
last_checked_at: 2026-06-02T07:06:57.951Z
Verification Summary
verdict: verified
checked_at: 2026-06-02T07:06:57.951Z
matched_actions: 131
action_count: 131
confidence: medium
summary: "All 131 spec actions matched verbatim against source command tables; transport parameters verified; full bidirectional coverage. (6 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "full-series firmware compatibility range not stated; per-command firmware requirements (v1.20a, v1.30a, v2.03a, v2.04a) listed in Notes."
- "source does not expose continuous settable variables; all state"
- "source does not describe unsolicited events. The device replies"
- "source does not describe device-side macros. The Height"
- "source contains no explicit safety warnings, interlocks, or"
- "source does not state the full series-wide firmware"
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0