Summary

RS-232 single-byte control protocol for the WolfVision VZ-C12 / C12² / C12³ / C32 / C32³ Visualizer (document camera) families. Two command pages (page 0 standard, page 1 extended) cover zoom, focus, iris, light, power, presets, image turn, video output, resolution, image store, and signal routing.

Transport

protocols:
  - serial
serial:
  baud_rate: 115200  # default per source; 19200 on older units; user-changeable 9600/19200/38400/57600/115200
  data_bits: 8
  parity: none
  stop_bits: 1
  flow_control: none  # source mentions no handshake lines; pins 2 (RxD), 3 (TxD), 5 (GND) only
  connector: DE-9 (Sub-D 9-pin)
auth:
  type: none  # inferred: no auth procedure in source

Traits

- powerable       # inferred from Power on/off, toggle, standby commands
- queryable       # inferred from many Get_* status queries
- levelable       # inferred from zoom/focus/iris position set/get
- routable        # inferred from Intern/Extern signal switching

Actions

# Page-0 commands may be sent directly. Page-1 commands require sending the
# page-select byte (0x31) first; the wire sequence is shown as "31 XX".
# Set-position commands expect a "?" prompt + 3 hex digits from controller.

# --- Page select ---
- id: select_page_0
  label: Select Page 0 (standard)
  kind: action
  command: "30"        # dec 048 - SER_Page0
  params: []
- id: select_page_1
  label: Select Page 1 (extended)
  kind: action
  command: "31"        # dec 049 - SER_Page1; auto-returns to page 0 after the next command
  params: []

# --- Zoom (page 0) ---
- id: zoom_wide
  label: Zoom Wide (step)
  kind: action
  command: "C3"        # dec 195 - send repetitively at min 10 Hz for continuous motion
  params: []
- id: zoom_tele
  label: Zoom Tele (step)
  kind: action
  command: "C7"        # dec 199
  params: []
- id: start_zoom_wide
  label: Start Zoom Wide (continuous)
  kind: action
  command: "81"        # dec 129
  params: []
- id: start_zoom_tele
  label: Start Zoom Tele (continuous)
  kind: action
  command: "82"        # dec 130
  params: []
- id: get_zoom_position
  label: Get Zoom Position
  kind: query
  command: "A1"        # dec 161 - returns 3-digit hex '000'..'FFF' + LF + CR
  params: []
- id: set_zoom_position
  label: Set Zoom Position
  kind: action
  command: "A2"        # dec 162 - echoes '?'; controller sends 3 hex digits within 3 s
  params:
    - name: position
      type: string
      description: 3-digit hex in range '000' (wide) to 'FFF' (tele)
- id: set_digital_zoom
  label: Set Digital Zoom
  kind: action
  command: "31 A3"     # dec 163 - page 1
  params:
    - name: position
      type: string
      description: 3-digit hex '000'..'FFF'
- id: get_digital_zoom
  label: Get Digital Zoom
  kind: query
  command: "31 A4"     # dec 164 - page 1
  params: []

# --- Focus (page 0) ---
- id: focus_far
  label: Focus Far (step)
  kind: action
  command: "C2"        # dec 194
  params: []
- id: focus_near
  label: Focus Near (step)
  kind: action
  command: "C6"        # dec 198
  params: []
- id: start_focus_far
  label: Start Focus Far (continuous)
  kind: action
  command: "83"        # dec 131
  params: []
- id: start_focus_near
  label: Start Focus Near (continuous)
  kind: action
  command: "84"        # dec 132
  params: []
- id: stop_zoom_focus_iris
  label: Stop Zoom/Focus/Iris
  kind: action
  command: "80"        # dec 128
  params: []
- id: get_focus_position
  label: Get Focus Position
  kind: query
  command: "A3"        # dec 163 (page 0) - returns 3-digit hex '000'..'FFF' + LF + CR
  params: []
- id: set_focus_position
  label: Set Focus Position
  kind: action
  command: "A4"        # dec 164 (page 0) - echoes '?'; controller sends 3 hex digits
  params:
    - name: position
      type: string
      description: 3-digit hex '000' (near) to 'FFF' (far)
- id: one_push_auto_focus
  label: One-Push Auto Focus
  kind: action
  command: "F9"        # dec 249
  params: []

# --- Iris (page 0) ---
- id: iris_open
  label: Iris Open / Brightness Up (step)
  kind: action
  command: "C1"        # dec 193
  params: []
- id: iris_close
  label: Iris Close / Brightness Down (step)
  kind: action
  command: "C5"        # dec 197
  params: []
- id: start_iris_open
  label: Start Iris Open
  kind: action
  command: "85"        # dec 133
  params: []
- id: start_iris_close
  label: Start Iris Close
  kind: action
  command: "86"        # dec 134
  params: []
- id: auto_iris_on
  label: Auto Iris On
  kind: action
  command: "A7"        # dec 167
  params: []
- id: auto_iris_off
  label: Auto Iris Off
  kind: action
  command: "A8"        # dec 168
  params: []
- id: get_auto_iris
  label: Get Auto Iris
  kind: query
  command: "A6"        # dec 166 - returns '1'+LF+CR (on) or '0'+LF+CR (off)
  params: []
- id: get_iris_position
  label: Get Iris Position
  kind: query
  command: "A5"        # dec 165 - returns 3-digit hex '000' (close) .. 'FFF' (open) + LF + CR
  params: []
- id: set_iris_position
  label: Set Iris Position
  kind: action
  command: "A9"        # dec 169 - echoes '?'; controller sends 3 hex digits
  params:
    - name: position
      type: string
      description: 3-digit hex '000' (close) to 'FFF' (open)

# --- Light (page 0) ---
- id: light_off
  label: Light Off
  kind: action
  command: "CD"        # dec 205
  params: []
- id: light_on
  label: Light On
  kind: action
  command: "B2"        # dec 178
  params: []
- id: get_light
  label: Get Light On/Off
  kind: query
  command: "AC"        # dec 172 - returns '1'+LF+CR (on) or '0'+LF+CR (off)
  params: []
- id: lamp_change
  label: Lamp Change
  kind: action
  command: "B1"        # dec 177 - replies "Perform Lampchange...Changed to Lamp1" (or Lamp2)
  notes: "Available with firmware v1.30a and later."
  params: []

# --- Power & presets (page 0) ---
- id: power_on
  label: Power On (Factory Preset)
  kind: action
  command: "C8"        # dec 200
  params: []
- id: power_off
  label: Power Off (Standby)
  kind: action
  command: "C9"        # dec 201
  params: []
- id: get_power
  label: Get Power State
  kind: query
  command: "AB"        # dec 171 - returns '1'+LF+CR (on) or '0'+LF+CR (standby)
  params: []
- id: power_toggle
  label: Power Toggle
  kind: action
  command: "BA"        # dec 186
  params: []
- id: recall_preset
  label: Recall Preset (indexed)
  kind: action
  command: "9A"        # dec 154 - echoes '?'; controller sends '1'..'9' within 3 s
  params:
    - name: index
      type: string
      description: Preset number '1'..'9'
- id: store_preset
  label: Store Preset (indexed)
  kind: action
  command: "9B"        # dec 155 - echoes '?'; controller sends '1'..'9' within 3 s
  params:
    - name: index
      type: string
      description: Preset number '1'..'9'
- id: preset_factory
  label: Preset 0 (Factory)
  kind: action
  command: "D5"        # dec 213
  params: []
- id: preset_1
  label: Preset 1
  kind: action
  command: "CA"        # dec 202
  params: []
- id: preset_2
  label: Preset 2
  kind: action
  command: "CB"        # dec 203
  params: []
- id: preset_3
  label: Preset 3
  kind: action
  command: "FD"        # dec 253
  params: []
- id: save_preset_1
  label: Save Preset 1
  kind: action
  command: "D8"        # dec 216
  params: []
- id: save_preset_2
  label: Save Preset 2
  kind: action
  command: "D9"        # dec 217
  params: []
- id: save_preset_3
  label: Save Preset 3
  kind: action
  command: "FE"        # dec 254
  params: []
- id: preset_max_wide
  label: Preset Max Wide
  kind: action
  command: "E5"        # dec 229
  params: []
- id: preset_din_a4
  label: Preset DIN A4
  kind: action
  command: "E6"        # dec 230
  params: []
- id: preset_din_a5
  label: Preset DIN A5
  kind: action
  command: "E7"        # dec 231
  params: []
- id: preset_din_a6
  label: Preset DIN A6
  kind: action
  command: "E8"        # dec 232
  params: []
- id: preset_din_a7
  label: Preset DIN A7
  kind: action
  command: "E9"        # dec 233
  params: []
- id: preset_din_a8
  label: Preset DIN A8
  kind: action
  command: "EA"        # dec 234
  params: []
- id: preset_max_tele
  label: Preset Max Tele
  kind: action
  command: "EB"        # dec 235
  params: []
- id: preset_slide
  label: Preset Slide (light off)
  kind: action
  command: "EC"        # dec 236
  params: []
- id: preset_xray_din_a4
  label: Preset X-ray DIN A4
  kind: action
  command: "ED"        # dec 237
  params: []
- id: preset_xray_din_a5
  label: Preset X-ray DIN A5
  kind: action
  command: "EE"        # dec 238
  params: []

# --- Visualizer menu / camera (page 0 unless noted) ---
- id: unlock_visualizer_menu
  label: Unlock Visualizer Menu
  kind: action
  command: "DA"        # dec 218
  params: []
- id: visualizer_menu_toggle
  label: Visualizer Menu On/Off
  kind: action
  command: "CE"        # dec 206
  params: []
- id: unlock_extra_menu_baud
  label: Unlock Extra Menu (Baud rate)
  kind: action
  command: "8B"        # dec 139
  params: []
- id: function_up
  label: Function Up (menu cursor)
  kind: action
  command: "D0"        # dec 208
  params: []
- id: function_down
  label: Function Down (menu cursor)
  kind: action
  command: "D1"        # dec 209
  params: []
- id: data_right_white_balance
  label: Data Right / White Balance
  kind: action
  command: "D2"        # dec 210
  params: []
- id: white_balance
  label: White Balance
  kind: action
  command: "97"        # dec 151
  params: []
- id: data_left_text_enhancer_toggle
  label: Data Left / Text Enhancer Toggle
  kind: action
  command: "D3"        # dec 211
  params: []
- id: text_enhancer_toggle
  label: Text Enhancer On/Off
  kind: action
  command: "96"        # dec 150
  params: []
- id: text_enhancer_on
  label: Text Enhancer On
  kind: action
  command: "31 9E"     # dec 158 - page 1
  params: []
- id: text_enhancer_off
  label: Text Enhancer Off
  kind: action
  command: "31 9F"     # dec 159 - page 1
  params: []
- id: get_text_enhancer
  label: Get Text Enhancer
  kind: query
  command: "31 A0"     # dec 160 - page 1; returns '1'+LF+CR or '0'+LF+CR
  params: []
- id: help
  label: Help (menu description)
  kind: action
  command: "D6"        # dec 214
  params: []
- id: data_left_right
  label: Data Left + Data Right (reset to default)
  kind: action
  command: "DC"        # dec 220
  params: []
- id: reset_menu
  label: Reset Menu (except output)
  kind: action
  command: "F6"        # dec 246
  params: []
- id: custom_serial_mode_on
  label: Custom Serial Mode On
  kind: action
  command: "F1"        # dec 241
  notes: "Available with firmware v1.30a and later. Deactivated by power-off."
  params: []
- id: custom_serial_mode_off
  label: Custom Serial Mode Off
  kind: action
  command: "F2"        # dec 242
  notes: "Available with firmware v1.30a and later."
  params: []

# --- Reply mode (page 0) ---
- id: reply_mode_off
  label: Reply Mode Off
  kind: action
  command: "9C"        # dec 156
  params: []
- id: reply_mode_one_byte
  label: Reply Mode - One Byte
  kind: action
  command: "9D"        # dec 157 - replies $06 (valid) or $0F (invalid)
  params: []
- id: reply_mode_two_bytes
  label: Reply Mode - Two Bytes
  kind: action
  command: "9E"        # dec 158 (page 0) - echoes received byte + $06/$0F
  params: []
- id: reply_mode_string
  label: Reply Mode - String
  kind: action
  command: "9F"        # dec 159 (page 0) - replies 'OKAY'+LF+CR or 'ERROR'+LF+CR
  params: []

# --- Miscellaneous (page 0 unless noted) ---
- id: blank_echo
  label: Blank Echo (ready probe)
  kind: query
  command: "20"        # dec 032 - echoes ASCII ' ' when unit is ready
  params: []
- id: get_version
  label: Get Visualizer Type & Firmware Version
  kind: query
  command: "76"        # dec 118 - returns e.g. "VZ-C32 V1.12b" + LF + CR
  params: []
- id: debug_mode_on
  label: Debug Mode On
  kind: action
  command: "FA"        # dec 250
  params: []
- id: camera_optic_status
  label: Camera & Optic Status (debug only)
  kind: query
  command: "3F"        # dec 063 - debug mode required; multi-line status string
  params: []
- id: ascii_entry
  label: ASCII Entry Mode ('_')
  kind: action
  command: "5F"        # dec 095 - responds '?'; controller sends 3-digit decimal code
  params: []
- id: key_lock_on
  label: Key Lock On
  kind: action
  command: "AF"        # dec 175
  params: []
- id: key_lock_off
  label: Key Lock Off
  kind: action
  command: "B0"        # dec 176
  params: []
- id: get_key_lock
  label: Get Key Lock
  kind: query
  command: "AE"        # dec 174 - returns '1'+LF+CR (active) or '0'+LF+CR (inactive)
  params: []
- id: get_status
  label: Get Status (all settings)
  kind: query
  command: "A0"        # dec 160 - returns key:value string, e.g. "Zoom:E4C DigitalZoom:000 Focus:802 ..."
  params: []
- id: switch_ir_mode
  label: Switch IR Mode (A/B/C/D)
  kind: action
  command: "DD"        # dec 221
  params: []
- id: demo_mode
  label: Demo Mode
  kind: action
  command: "F4"        # dec 244 - send any code/key to exit
  params: []
- id: toggle_intern_extern
  label: Toggle Intern/Extern
  kind: action
  command: "31 80"     # dec 128 - page 1
  params: []
- id: switch_extern_on
  label: Switch Extern Signal On
  kind: action
  command: "31 81"     # dec 129 - page 1
  params: []
- id: switch_intern_on
  label: Switch Intern Signal On
  kind: action
  command: "31 82"     # dec 130 - page 1
  params: []
- id: get_extern
  label: Get Extern Signal
  kind: query
  command: "31 83"     # dec 131 - page 1; returns '1'+LF+CR or '0'+LF+CR
  params: []

# --- Image turn (page 1) ---
- id: portrait_toggle
  label: Portrait / Image Turn Toggle
  kind: action
  command: "31 84"     # dec 132 - page 1
  params: []
- id: portrait_on
  label: Portrait On
  kind: action
  command: "31 85"     # dec 133 - page 1
  params: []
- id: portrait_off
  label: Portrait Off
  kind: action
  command: "31 86"     # dec 134 - page 1
  params: []
- id: get_portrait
  label: Get Portrait State
  kind: query
  command: "31 87"     # dec 135 - page 1; returns 0/1/2/3 + LF + CR
  params: []

# --- Video output (page 1) ---
- id: video_pal
  label: Video Output PAL
  kind: action
  command: "31 94"     # dec 148 - page 1; not available on VZ-C12²
  params: []
- id: video_ntsc
  label: Video Output NTSC
  kind: action
  command: "31 95"     # dec 149 - page 1; not available on VZ-C12²
  params: []
- id: get_video
  label: Get Video Mode
  kind: query
  command: "31 96"     # dec 150 - page 1; returns "PAL" or "NTSC" + LF + CR
  params: []

# --- Output resolution (page 1) ---
- id: resolution_up
  label: Resolution Up (both outputs)
  kind: action
  command: "31 90"     # dec 144 - page 1
  params: []
- id: resolution_down
  label: Resolution Down (both outputs)
  kind: action
  command: "31 91"     # dec 145 - page 1
  params: []
- id: resolution_xga_75
  label: Resolution XGA/75 (both, AUTO-detect)
  kind: action
  command: "31 92"     # dec 146 - page 1
  params: []
- id: get_resolution_vga
  label: Get Resolution (VGA output)
  kind: query
  command: "31 93"     # dec 147 - page 1; e.g. "XGA at 75Hz" + LF + CR
  params: []
- id: vga_resolution_up
  label: VGA Resolution Up
  kind: action
  command: "31 AA"     # dec 170 - page 1
  params: []
- id: vga_resolution_down
  label: VGA Resolution Down
  kind: action
  command: "31 AB"     # dec 171 - page 1
  params: []
- id: vga_resolution_auto
  label: VGA Resolution AUTO
  kind: action
  command: "31 AC"     # dec 172 - page 1
  params: []
- id: get_resolution_dvi
  label: Get Resolution (DVI output)
  kind: query
  command: "31 A9"     # dec 169 - page 1
  params: []
- id: dvi_resolution_up
  label: DVI Resolution Up
  kind: action
  command: "31 AD"     # dec 173 - page 1
  params: []
- id: dvi_resolution_down
  label: DVI Resolution Down
  kind: action
  command: "31 AE"     # dec 174 - page 1
  params: []
- id: dvi_resolution_auto
  label: DVI Resolution AUTO
  kind: action
  command: "31 AF"     # dec 175 - page 1
  params: []

# --- Output signal (page 1) ---
- id: switch_positive_on
  label: Positive Image On
  kind: action
  command: "31 97"     # dec 151 - page 1
  params: []
- id: switch_negative_on
  label: Negative Image On
  kind: action
  command: "31 98"     # dec 152 - page 1
  params: []
- id: switch_negative_blue_on
  label: Negative Blue Image On
  kind: action
  command: "31 99"     # dec 153 - page 1
  params: []
- id: get_positive_negative
  label: Get Positive/Negative
  kind: query
  command: "31 9A"     # dec 154 - page 1; returns 0/1/2 + LF + CR
  params: []
- id: switch_color_on
  label: Color Image On
  kind: action
  command: "31 9B"     # dec 155 - page 1
  params: []
- id: switch_black_white_on
  label: Black/White Image On
  kind: action
  command: "31 9C"     # dec 156 - page 1
  params: []
- id: get_black_white
  label: Get Black/White
  kind: query
  command: "31 9D"     # dec 157 - page 1; returns 0/1 + LF + CR
  params: []

# --- Image storing (page 1 unless noted) ---
- id: memory_store
  label: Memory Store (indexed)
  kind: action
  command: "31 8C"     # dec 140 - page 1; echoes '?'; controller sends '1'..'9' within 3 s
  params:
    - name: index
      type: string
      description: Memory number '1'..'9'
- id: memory_recall
  label: Memory Recall (indexed)
  kind: action
  command: "31 8D"     # dec 141 - page 1; echoes '?'; controller sends '1'..'9' within 3 s
  params:
    - name: index
      type: string
      description: Memory number '1'..'9'
- id: memory_off
  label: Memory Off (live image)
  kind: action
  command: "31 8E"     # dec 142 - page 1
  params: []
- id: snapshot
  label: Snapshot (fill all 9 memories)
  kind: action
  command: "31 8F"     # dec 143 - page 1
  params: []
- id: show_all_toggle
  label: Show All Memories Toggle
  kind: action
  command: "31 88"     # dec 136 - page 1
  params: []
- id: show_all_on
  label: Show All Memories On
  kind: action
  command: "31 89"     # dec 137 - page 1
  params: []
- id: show_all_off
  label: Show All Memories Off
  kind: action
  command: "31 8A"     # dec 138 - page 1
  params: []
- id: get_show_all
  label: Get Show All
  kind: query
  command: "31 8B"     # dec 139 - page 1; returns 1/0 + LF + CR
  params: []
- id: erase_memory
  label: Erase All Memories
  kind: action
  command: "31 A5"     # dec 165 - page 1
  params: []
- id: freeze_toggle
  label: Freeze Toggle
  kind: action
  command: "D7"        # dec 215 - page 0
  params: []
- id: freeze_on
  label: Freeze On
  kind: action
  command: "31 A6"     # dec 166 - page 1
  params: []
- id: freeze_off
  label: Freeze Off
  kind: action
  command: "31 A7"     # dec 167 - page 1
  params: []
- id: get_freeze
  label: Get Freeze
  kind: query
  command: "31 A8"     # dec 168 - page 1; returns 1/0 + LF + CR
  params: []

# --- Image on/off (page 0) ---
- id: image_toggle
  label: Image On/Off Toggle
  kind: action
  command: "B9"        # dec 185
  params: []
- id: image_on
  label: Image On
  kind: action
  command: "C0"        # dec 192
  params: []
- id: image_off
  label: Image Off
  kind: action
  command: "C4"        # dec 196
  params: []

Feedbacks

- id: power_state
  type: enum
  values: [on, standby]
  source: get_power (0xAB)
- id: light_state
  type: enum
  values: [on, off]
  source: get_light (0xAC)
- id: zoom_position
  type: string
  description: 3-digit hex '000' (wide) .. 'FFF' (tele)
  source: get_zoom_position (0xA1)
- id: focus_position
  type: string
  description: 3-digit hex '000' (near) .. 'FFF' (far)
  source: get_focus_position (0xA3)
- id: iris_position
  type: string
  description: 3-digit hex '000' (close) .. 'FFF' (open)
  source: get_iris_position (0xA5)
- id: auto_iris
  type: enum
  values: [on, off]
  source: get_auto_iris (0xA6)
- id: text_enhancer
  type: enum
  values: [on, off]
  source: get_text_enhancer (0x31 0xA0)
- id: key_lock
  type: enum
  values: [active, inactive]
  source: get_key_lock (0xAE)
- id: extern_signal
  type: enum
  values: [active, inactive]
  source: get_extern (0x31 0x83)
- id: portrait_state
  type: enum
  values: ["0_deg", "-90_deg", "180_deg", "+90_deg"]
  description: "Pre-v2.04a firmware returns simple 0/1 active/inactive."
  source: get_portrait (0x31 0x87)
- id: video_mode
  type: enum
  values: [PAL, NTSC]
  source: get_video (0x31 0x96)
- id: positive_negative
  type: enum
  values: [positive, negative, negative_blue]
  source: get_positive_negative (0x31 0x9A)
- id: color_mode
  type: enum
  values: [color, black_white]
  source: get_black_white (0x31 0x9D)
- id: show_all
  type: enum
  values: [active, inactive]
  source: get_show_all (0x31 0x8B)
- id: freeze
  type: enum
  values: [active, inactive]
  source: get_freeze (0x31 0xA8)
- id: version_string
  type: string
  description: "e.g. 'VZ-C32 V1.12b'"
  source: get_version (0x76)
- id: status_string
  type: string
  description: "Key:value list of all current settings (single line)."
  source: get_status (0xA0)
- id: vga_resolution
  type: string
  description: "Free-form, e.g. 'XGA at 75Hz'."
  source: get_resolution_vga (0x31 0x93)
- id: dvi_resolution
  type: string
  description: "Free-form, e.g. 'XGA/75Hz'."
  source: get_resolution_dvi (0x31 0xA9)

Variables

# Position-setting variables (controller sends 3 hex digits after '?' prompt within 3 s)
- id: zoom_position
  type: string
  range: "000..FFF"
  description: Hex zoom position. 000 = wide, FFF = tele.
  set_action: set_zoom_position
- id: focus_position
  type: string
  range: "000..FFF"
  description: Hex focus position. 000 = near, FFF = far.
  set_action: set_focus_position
- id: iris_position
  type: string
  range: "000..FFF"
  description: Hex iris position. 000 = close, FFF = open.
  set_action: set_iris_position
- id: digital_zoom
  type: string
  range: "000..FFF"
  description: Hex digital zoom position.
  set_action: set_digital_zoom

Events

# Reply-mode dependent. With reply mode off (default), no unsolicited events.
# Other reply modes echo after each command.
- id: ready_echo
  description: "Blank Echo (0x20) returns ASCII space when unit is ready to receive the next command; no reply when busy."
  trigger: poll
- id: lamp_change_status
  description: "Lamp change command (0xB1) replies with the string 'Perform Lampchange...Changed to Lamp1' (or Lamp2)."
  trigger: command_completion
- id: custom_mode_menu_line
  description: "When Custom Serial Mode is on, the current on-screen menu line is output via RS-232 + LF + CR on each cursor change (e.g. '> Color Settings <')."
  trigger: state_change

Macros

# Custom Serial Mode Height Adjustment (firmware v1.30a+, page 0 commands)
# Each step name is output to the controller as it begins.
- id: height_adjustment_step1_center_lightfield_coarse
  description: "Center lightfield (coarse). Sends 0xD2 (Data Right), 0xD3 (Data Left), 0xD0 (Function Up), 0xD1 (Function Down) as needed; confirm with 0xD6 (Help)."
  steps:
    - "Send 0xD6 to confirm"
  notes: "Step 1 of 4 in height-adjustment procedure."
- id: height_adjustment_step2_adjust_camera_focus
  description: "Adjust camera focus. 0xC2/0xC6 step, or 0x83/0x84 continuous with 0x80 to stop; confirm with 0xD6."
  steps:
    - "Send 0xD6 to confirm"
  notes: "Step 2 of 4."
- id: height_adjustment_step3_adjust_light_focus
  description: "Adjust light focus. Same commands as step 2; confirm with 0xD6."
  steps:
    - "Send 0xD6 to confirm"
  notes: "Step 3 of 4."
- id: height_adjustment_step4_center_lightfield_fine
  description: "Center lightfield (fine). Same commands as step 1; confirm with 0xD6."
  steps:
    - "Send 0xD6 to confirm"
  notes: "Step 4 of 4. After all four steps, unit sends 'Height Adjustment Done' + LF + CR."

Safety

confirmation_required_for:
  - erase_memory        # 0x31 0xA5 - destroys all 9 stored images
  - lamp_change         # 0xB1 - physically swaps the lamp
  - reset_menu          # 0xF6 - resets all Visualizer settings (except output)
  - power_on_factory    # 0xC8 - also recalls factory preset
  - preset_factory      # 0xD5 - recalls factory preset
interlocks: []
# No additional safety warnings stated in source. Stop Zoom/Focus/Iris (0x80) acts
# as a generic motion-stop for any in-progress Start command.

Notes

  • Source document: WolfVision "Serial Protocol of VZ-C12, VZ-C12², VZ-C12³, VZ-C32 and VZ-C32" T-05/07, revised 5 March 2010.
  • Protocol is upward compatible with VZ-27plus / VZ-57plus, except arm functions.
  • Two command pages: page 0 (standard, no prefix needed) and page 1 (preceded by 0x31 page-select; unit auto-returns to page 0 after one page-1 command). Several opcodes are reused across pages with different meanings — always track page state.
  • Some bytes (e.g. 0x9E, 0x9F, 0x80, 0x81, 0x82, 0x83) appear on both pages with different meanings. The page-1 form is the wire sequence "31 XX" as shown in the Actions block.
  • Default reply mode is "off" (no reply) after mains power-on. Reply modes: off (0x9C), one byte (0x9D, $06/$0F), two bytes (0x9E, echo+status), string (0x9F, "OKAY"/"ERROR" + LF + CR).
  • Reply mode change takes effect for the reply-mode command itself: 0x9C never replies; 0x9F always replies.
  • Continuous-motion commands (zoom/focus/iris step or start) require min 10 Hz repetition. Use Blank Echo (0x20) as a ready probe between bursts.
  • "Set X-Position" commands (zoom, focus, iris, digital zoom) echo '?' and require controller to send 3 hex digits within 3 seconds, no CR/LF.
  • "Recall/Store Preset" and "Memory Store/Recall" also use the '?' + 3-second-ASCII-input handshake for indexed variants.
  • Newer hardware (VZ-C12² SN ≥ 1009412, VZ-C32 SN ≥ 1011797) supports an extended command list referenced at www.wolfvision.com/wolf/protocol_command_wolfvision/protocol_command.htm — not covered here.
  • VZ-C12² has no video output (commands 0x31 0x94/0x95/0x96 unsupported).
  • Lamp-change, custom serial mode require firmware v1.30a or later.
  • Some new resolutions (1080p, 720p, WXGA, WSXGA, XGA 16:9) require firmware v1.20a or later. SXGA+ changed from 1360x1024 to 1400x1050 in firmware v2.03a.
  • Height adjustment procedure requires firmware v1.30a or later. Can be aborted at any time with 0xCE (Visualizer Menu on/off).
  • Source deliberately notes future protocols may add commands at higher firmware versions.

Provenance

source_domains:
  - wolfvision.com
source_urls:
  - https://wolfvision.com/wolf/serial_ceiling32.pdf
retrieved_at: 2026-04-30T04:32:42.910Z
last_checked_at: 2026-06-02T07:06:57.213Z

Verification Summary

verdict: verified
checked_at: 2026-06-02T07:06:57.213Z
matched_actions: 131
action_count: 131
confidence: medium
summary: "All 131 authoritative spec actions matched literally in source; transport parameters fully verified; command fidelity confirmed. (2 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "no Ethernet/IP variant documented in this source. Source is strictly RS-232 (T-05/07)."
- "- Minimum required firmware version for the base command set (not stated)."

From the AI4AV catalog (https://ai4av.net) · ODbL-1.0