Summary

The SE-1200MU is a video switcher Processor Unit controlled over Ethernet using TCP/IP. The device exposes 4 paired Command/Real-Time TCP port pairs (default 5002/5001, 5004/5003, 5006/5005, 5008/5007) plus a Connection Request channel on 5009. Two protocols run on top: a Command Protocol (asynchronous request/response) and a Real-Time Protocol (field-synchronous parameter exchange). All values on the wire are 32-bit DWORDS (signed int or float); no authentication is described.

Transport

protocols:
  - tcp
addressing:
  host: 192.168.100.101  # default device IP per source
  port: 5002            # Command Port 1; Real-Time Port 1 is 5001
  # Additional paired channels: Command 5004/5006/5008, Real-Time 5003/5005/5007
  # Connection Request Channel: 5009
auth:
  type: none  # inferred: no auth procedure in source

Traits

- powerable       # inferred: not explicit in source - UNRESOLVED, remove if unsure
- routable        # inferred: PGM/PST source select and crosspoint controls present
- queryable       # inferred: GET_CONTROL and status register reads present
- levelable       # inferred: per-input proc amp, transition level, keyer opacity present

Actions

# Command Protocol opcodes (Section 2.2). Each 32-bit DWORD opcode lives at
# dword index 1 of the packet; Parameter1 / Parameter2 follow at indices 2+.
# Packet size in bytes = N*4 (N dwords). All values 32-bit int or float.
- id: get_control
  label: Get Control Value
  kind: query
  command: "0x00 0x00 0x0C {section_and_control}"  # DV_COMMAND_GET_CONTROL=0
  notes: |
    Packet: size(4B)=0x0C, command=0, parameter1=((section<<16)|control).
    Response arrives as a SET_CONTROL message with the current value.

- id: set_control
  label: Set Control Value
  kind: action
  command: "0x00 0x00 0x0C {section_and_control} {value_dword}"
  notes: |
    Packet: size(4B)=0x0C, command=1, parameter1=((section<<16)|control),
    parameter2=value. Multiple (section/control, value) pairs may follow in
    one packet (see Real-Time Protocol packet example, Section 3.2.2).
  params:
    - name: section
      type: integer
      description: Section number (see Variables/Sections list)
    - name: control
      type: integer
      description: Control number within section
    - name: value
      type: integer
      description: 32-bit int or IEEE-754 float (depends on control type)

- id: open_still_file
  label: Open Still File
  kind: action
  command: "0x00 0x00 0x0C 0x02 {still_num} {mode}"
  notes: command=2. Mode: 0=Read, 1=Write.

- id: open_mini_pic_file
  label: Open Mini-Pic File
  kind: action
  command: "0x00 0x00 0x0C 0x03 {still_num} {mode}"
  notes: command=3. Mode: 0=Read, 1=Write.

- id: close_data_file
  label: Close Data File
  kind: action
  command: "0x00 0x00 0x08 0x04"
  notes: command=4. 8-byte packet (size=0x08).

- id: get_file_data
  label: Get File Data Chunk
  kind: action
  command: "0x00 0x00 0x0C 0x05 {num_bytes}"
  notes: command=5. Returns data via STORE_FILE_DATA.

- id: store_file_data
  label: Store File Data
  kind: action
  command: "0x00 0x00 {size_dword} 0x06 {chunk_length} {chunk_number} {data_bytes}"
  notes: command=6. Also used to return data from GET_FILE_DATA. Packet size = 0x0C + data_size.

- id: still_event
  label: Still Event
  kind: action
  command: "0x00 0x00 0x00 0x07"
  notes: command=7. Not currently supported per source.

- id: get_mini_pic
  label: Get Mini-Pic
  kind: action
  command: "0x00 0x00 0x0C 0x08 {num}"
  notes: command=8. Returns DV_COMMAND_RESULT_MINI_PIC (96x54 px, 32bpp RGBA).

- id: get_input_name
  label: Get Input Name
  kind: action
  command: "0x00 0x00 0x0C 0x09 {input_num}"
  notes: command=9. Returns DV_COMMAND_RESULT_INPUT_NAME (Unicode name).

- id: set_input_name
  label: Set Input Name
  kind: action
  command: "0x00 0x00 {size_dword} 0x0A {name_length_chars} {name_unicode}"
  notes: command=10.

- id: get_file_name
  label: Get File Name
  kind: action
  command: "0x00 0x00 0x00 0x0B {type} {file_num}"
  notes: command=11. Type: 0=Mem, 1=Still.

- id: set_file_name
  label: Set File Name
  kind: action
  command: "0x00 0x00 {size_dword} 0x0C {type} {file_num} {name_length_chars} {name_unicode}"
  notes: command=12.

- id: get_user_mem
  label: Get User Memory
  kind: action
  command: "0x00 0x00 0x0C 0x0D {num}"
  notes: command=13. Returns DV_COMMAND_RESULT_USER_MEM.

- id: store_user_mem
  label: Store User Memory
  kind: action
  command: "0x00 0x00 0x00 0x0E {num} {user_mem_data}"
  notes: command=14.

- id: streamer_control
  label: Streamer Control
  kind: action
  command: "0x00 0x00 0x00 0x0F {streamer_cmd} {params...}"
  notes: |
    command=15. Sub-commands: DV_STREAMER_LAUNCH (start), DV_STREAMER_STOP (stop).
    Additional streamer parameters set via SECTION_STREAMER_CTRL (Section 4.1.13).

- id: streamer_launch
  label: Streamer Launch
  kind: action
  command: "0x00 0x00 0x00 0x0F DV_STREAMER_LAUNCH"
  notes: Sub-command of DV_COMMAND_STREAMER_CONTROL (15). Starts the streamer.

- id: streamer_stop
  label: Streamer Stop
  kind: action
  command: "0x00 0x00 0x00 0x0F DV_STREAMER_STOP"
  notes: Sub-command of DV_COMMAND_STREAMER_CONTROL (15). Stops the streamer.

- id: open_software_file
  label: Open Software File
  kind: action
  command: "0x00 0x00 {size_dword} 0x10 {exe_flag} {file_name_0x00_terminated}"
  notes: command=16. Exe flag in dword 3, file name in dwords 4..n (NUL terminated).

- id: install_software
  label: Install Software
  kind: action
  command: "0x00 0x00 0x00 0x11"
  notes: command=17. Finishes the software upgrade process.

- id: open_names_file
  label: Open Names File
  kind: action
  command: "0x00 0x00 0x00 0x12"
  notes: command=18.

- id: recorder_control
  label: Recorder Control
  kind: action
  command: "0x00 0x00 0x00 0x13"
  notes: command=19.

- id: chroma_keyer_auto
  label: Chroma Keyer Auto
  kind: action
  command: "0x00 0x00 0x00 0x14"
  notes: command=20.

# Real-Time Protocol actions operate on the same Section/Control encoding as
# SET_CONTROL; the only difference is transport (Real-Time port + field-rate
# exchange). The Processor Unit pushes Parameter/Value pairs unsolicited.
- id: rt_param_value_packet
  label: Real-Time Parameter/Value Packet
  kind: action
  command: "0x00 0x00 {size_dword} 0x00 {section_and_control} {value_dword} [...]"
  notes: |
    Same format as SET_CONTROL but sent over Real-Time port (e.g. 5003).
    Multiple (section/control, value) pairs per packet. Command dword ignored.
    Controller must reply to every packet (null or param/value).

- id: rt_null_packet
  label: Real-Time Null Packet
  kind: action
  command: "0x00 0x00 0x08 0x00 0x00 0x00 0x00"
  notes: 8-byte null packet. Sent/replied to keep field-rate exchange alive.

# Connection Request Channel (Section 2.1.1)
- id: connection_request
  label: Connection Request
  kind: action
  command: "0x00 0x00 0x08 0x55AA0001"
  notes: |
    Sent to port 5009. Response (8 bytes) is one of:
    0xaa55ffff - no connection available
    0xaa55xxxx - free Real-Time port number (xxxx, e.g. 5001)
    0x55aa0000 - packet size error
    0x55aa0001 - unknown command

Feedbacks

# All feedback values are returned via SET_CONTROL messages on the Command
# port, or pushed via Parameter/Value Packets on the Real-Time port.
- id: powerable_trait
  type: boolean
  description: No explicit power on/off command documented in source; power state must be observed via transition engine state, not asserted.

- id: connection_status
  type: enum
  values: [no_connection, pending, connected]
  values_source:
    - DV_CONNECTION_NO_CONNECTION (0)
    - DV_CONNECTION_PENDING (1)
    - DV_CONNECTION_CONNECTED (2)
  description: STATUS_SYSTEM_CONNECTION_STATUS (Section 4.1.1.1)

- id: system_version
  type: integer
  description: STATUS_SYSTEM_VERSION - System Header version

- id: main_version
  type: integer
  description: STATUS_MAIN_VERSION - Main Header version

- id: software_version
  type: integer
  description: |
    STATUS_SOFTWARE_VERSION (Section 4.1.1.4).
    Bits [31:24]=Major, [23:16]=Minor, [15:0]=Build.

- id: fpga_version
  type: integer
  description: |
    STATUS_FPGA_VERSION (Section 4.1.1.5).
    Bit31=SD-mode FPGA, [30:16]=year hex, [15:8]=month hex, [7:0]=day hex.

- id: board_id_version
  type: integer
  description: STATUS_BOARD_ID_VERSION

- id: tally_source_1_to_4
  type: integer
  description: STATUS_TALLY_SOURCE1..4 (7..26 in section 0)

- id: tally_pgm_src
  type: integer
  description: STATUS_TALLY_PGM_SRC (control 27)

- id: tally_pst_src
  type: integer
  description: STATUS_TALLY_PST_SRC (control 28)

- id: tally_key1_fill_src
  type: integer
  description: STATUS_TALLY_KEY1_FILL_SRC (control 29)

- id: tally_key1_key_src
  type: integer
  description: STATUS_TALLY_KEY1_KEY_SRC (control 30)

- id: tally_key2_fill_src
  type: integer
  description: STATUS_TALLY_KEY2_FILL_SRC (control 31)

- id: tally_key2_key_src
  type: integer
  description: STATUS_TALLY_KEY2_KEY_SRC (control 32)

- id: tally_dsk1_fill_src
  type: integer
  description: STATUS_TALLY_DSK1_FILL_SRC (control 33)

- id: tally_dsk1_key_src
  type: integer
  description: STATUS_TALLY_DSK1_KEY_SRC (control 34)

- id: tally_dsk2_fill_src
  type: integer
  description: STATUS_TALLY_DSK2_FILL_SRC (control 35)

- id: tally_dsk2_key_src
  type: integer
  description: STATUS_TALLY_DSK2_KEY_SRC (control 36)

- id: me_trans_state
  type: enum
  values: [stopped, at_start, running, at_end, paused]
  values_source: [0, 1, 2, 3, 4]
  description: ME_TRANS_STATE - current M/E Transition Engine state

- id: dsk_trans_state
  type: enum
  values: [stopped, at_start, running, at_end, paused]
  description: DSK_TRANS_STATE - DSK Transition Engine state

- id: ftb_trans_state
  type: enum
  values: [stopped, at_start, running, at_end, paused]
  description: FTB_TRANS_STATE - FTB Transition Engine state

- id: me_trans_command_ready
  type: boolean
  description: |
    ME_TRANS_COMMAND returns value 8 (Transition Ready) once the engine has
    processed the previous command. Poll before issuing next command.

- id: memory_state
  type: enum
  values: [ready, busy, error]
  values_source: [0, 1, 2]
  description: MEMORY_STATE - Memory Command Processor state

- id: memory_result
  type: enum
  values: [ok, fail, not_found, illegal_command, illegal_value]
  values_source: [0, 1, 2, 3, 4]
  description: MEMORY_RESULT

- id: memory_event
  type: integer
  description: |
    MEMORY_EVENT - incremented whenever a memory-altering command (Store/Delete)
    completes. Detects changes made by other controllers.

- id: memory_present_flags
  type: integer
  description: |
    SECTION_MEMORY_PRESENT - 1000 1-bit flags packed into 32 dwords. 1=memory stored.

- id: still_state
  type: enum
  values: [ready, busy, error]
  values_source: [0, 1, 2]
  description: STILL_STATE

- id: still_result
  type: enum
  values: [ok, fail, not_found, illegal_command, illegal_value]
  values_source: [0, 1, 2, 3, 4]
  description: STILL_RESULT

- id: still_event
  type: integer
  description: STILL_EVENT - incremented on Store/Delete

- id: still_present_flags
  type: integer
  description: |
    SECTION_STILL_PRESENT - 100 1-bit flags packed into 4 dwords.

- id: input_valid
  type: boolean
  description: INPUT_INPUT_VALID - 0=not valid, 1=valid

Variables

# Sections (control num encoding, 16-bit each):
# Section 0: SECTION_STATUS, 1: SECTION_SYSTEM, 2: SECTION_SWITCHER,
# 3: SECTION_INPUT (per channel), 4: SECTION_INPUT_CTRL, 5: SECTION_OUTPUT_CTRL,
# 6: SECTION_AUDIO_CTRL, 7: SECTION_TRANSITION_CTRL, 8: SECTION_MEMORY_CTRL,
# 9: SECTION_MEMORY_PRESENT, 10: SECTION_STILL_CTRL, 11: SECTION_STILL_PRESENT,
# 12: SECTION_STREAMER_CTRL.

- id: system_standard
  section: 1
  control: 0
  type: enum
  values_source:
    - DV_STD_HD1080I_60 (0) - 1080i/60
    - DV_STD_HD1080I_59_94 (1) - 1080i/59.94
    - DV_STD_HD1080I_50 (2) - 1080i/50
    - DV_STD_HD720P_60 (3) - 720p/60
    - DV_STD_HD720P_59_94 (4) - 720p/59.94
    - DV_STD_HD720P_50 (5) - 720p/50

- id: system_aspect
  section: 1
  control: 1
  type: flag

- id: system_genlock_enable
  section: 1
  control: 2
  type: flag

- id: system_genlock_src
  section: 1
  control: 3
  type: integer

- id: system_genlock_h_phase
  section: 1
  control: 4
  type: integer

- id: system_genlock_v_phase
  section: 1
  control: 5
  type: integer

# Wipe controls (Section 2 = SWITCHER, controls 0..12)
- id: switcher_wipe_pattern_num
  section: 2
  control: 0
  type: integer
  range: [1, 32]

- id: switcher_wipe_level
  section: 2
  control: 1
  type: float
  range: [0.0, 100.0]

- id: switcher_wipe_position_x
  section: 2
  control: 2
  type: float
  range: [-16.0, 16.0]

- id: switcher_wipe_position_y
  section: 2
  control: 3
  type: float
  range: [-16.0, 16.0]

- id: switcher_wipe_rotation
  section: 2
  control: 4
  type: float
  range: [-16.0, 16.0]

- id: switcher_wipe_soft
  section: 2
  control: 5
  type: float
  range: [0.0, 100.0]

- id: switcher_wipe_soft_bal
  section: 2
  control: 7
  type: float
  range: [-100.0, 100.0]

- id: switcher_wipe_border_width
  section: 2
  control: 8
  type: float
  range: [0.0, 100.0]

- id: switcher_wipe_border_enable
  section: 2
  control: 9
  type: flag

- id: switcher_wipe_border_hue
  section: 2
  control: 10
  type: float
  range: [0.0, 360.0]

- id: switcher_wipe_border_sat
  section: 2
  control: 11
  type: float
  range: [0.0, 100.0]

- id: switcher_wipe_border_luma
  section: 2
  control: 12
  type: float
  range: [0.0, 100.0]

# Keyer 1 (controls 19..48)
- id: switcher_key1_keyer_on
  section: 2
  control: 19
  type: flag

- id: switcher_key1_key_src
  section: 2
  control: 20
  type: enum
  values_source:
    - "00: Black"
    - "01-04: Input 1-4"
    - "17: Matte"
    - "18: Flex Src"
    - "19: Still 1"
    - "20: Still 2"

- id: switcher_key1_split_src
  section: 2
  control: 21
  type: integer

- id: switcher_key1_linear_opacity
  section: 2
  control: 22
  type: float

- id: switcher_key1_linear_lift
  section: 2
  control: 23
  type: float
  range: [0.0, 100.0]

- id: switcher_key1_linear_gain
  section: 2
  control: 24
  type: float
  range: [0.0, 16.0]

- id: switcher_key1_linear_key_mode
  section: 2
  control: 25
  type: enum
  values_source: ["0: Linear Mix (Luma)", "1: Additive Mix (Linear)"]

- id: switcher_key1_linear_key_invert
  section: 2
  control: 26
  type: float

- id: switcher_key1_linear_key_sel_mode
  section: 2
  control: 27
  type: enum
  values_source: ["0: Self Key", "1: Split", "2: PIP"]

- id: switcher_key1_linear_key_fill_mode
  section: 2
  control: 28
  type: enum
  values_source: ["0: Video Fill", "1: Matte"]

- id: switcher_key1_linear_matte_hue
  section: 2
  control: 29
  type: float

- id: switcher_key1_linear_matte_sat
  section: 2
  control: 30
  type: float

- id: switcher_key1_linear_matte_luma
  section: 2
  control: 31
  type: float

- id: switcher_key1_chroma_enable
  section: 2
  control: 32
  type: boolean

- id: switcher_key1_chroma_matte_hue
  section: 2
  control: 33
  type: float

- id: switcher_key1_chroma_matte_sat
  section: 2
  control: 34
  type: float

- id: switcher_key1_chroma_matte_luma
  section: 2
  control: 35
  type: float

- id: switcher_key1_chroma_key_acc
  section: 2
  control: 36
  type: float
  range: [0.0, 180.0]

- id: switcher_key1_chroma_key_gain
  section: 2
  control: 37
  type: float
  range: [0.0, 16.0]

- id: switcher_key1_chroma_key_lift
  section: 2
  control: 38
  type: float

- id: switcher_key1_chroma_chroma_acc
  section: 2
  control: 39
  type: float
  range: [0.0, 180.0]

- id: switcher_key1_chroma_chroma_sup
  section: 2
  control: 40
  type: float

- id: switcher_key1_chroma_key_soft
  section: 2
  control: 41
  type: float

- id: switcher_key1_chroma_key_shrink
  section: 2
  control: 42
  type: float

- id: switcher_key1_chroma_bgnd_suppress
  section: 2
  control: 43
  type: integer

- id: switcher_key1_mask_left
  section: 2
  control: 44
  type: float

- id: switcher_key1_mask_right
  section: 2
  control: 45
  type: float

- id: switcher_key1_mask_top
  section: 2
  control: 46
  type: float

- id: switcher_key1_mask_bottom
  section: 2
  control: 47
  type: float

- id: switcher_key1_mask_enable
  section: 2
  control: 48
  type: boolean

# Keyer 2 (controls 49..78) - same pattern as Keyer 1
- id: switcher_key2_keyer_on
  section: 2
  control: 49
  type: integer

- id: switcher_key2_key_src
  section: 2
  control: 50
  type: integer

- id: switcher_key2_split_src
  section: 2
  control: 51
  type: integer

- id: switcher_key2_linear_opacity
  section: 2
  control: 52
  type: float

- id: switcher_key2_linear_lift
  section: 2
  control: 53
  type: float

- id: switcher_key2_linear_gain
  section: 2
  control: 54
  type: float
  range: [0.0, 16.0]

- id: switcher_key2_linear_key_mode
  section: 2
  control: 55
  type: integer

- id: switcher_key2_linear_key_invert
  section: 2
  control: 56
  type: float

- id: switcher_key2_linear_key_sel_mode
  section: 2
  control: 57
  type: integer

- id: switcher_key2_linear_key_fill_mode
  section: 2
  control: 58
  type: integer

- id: switcher_key2_linear_matte_hue
  section: 2
  control: 59
  type: float

- id: switcher_key2_linear_matte_sat
  section: 2
  control: 60
  type: float

- id: switcher_key2_linear_matte_luma
  section: 2
  control: 61
  type: float

- id: switcher_key2_chroma_enable
  section: 2
  control: 62
  type: integer

- id: switcher_key2_chroma_matte_hue
  section: 2
  control: 63
  type: float

- id: switcher_key2_chroma_matte_sat
  section: 2
  control: 64
  type: float

- id: switcher_key2_chroma_matte_luma
  section: 2
  control: 65
  type: float

- id: switcher_key2_chroma_key_acc
  section: 2
  control: 66
  type: float
  range: [0.0, 180.0]

- id: switcher_key2_chroma_key_gain
  section: 2
  control: 67
  type: float
  range: [0.0, 16.0]

- id: switcher_key2_chroma_key_lift
  section: 2
  control: 68
  type: float

- id: switcher_key2_chroma_chroma_acc
  section: 2
  control: 69
  type: float
  range: [0.0, 180.0]

- id: switcher_key2_chroma_chroma_sup
  section: 2
  control: 70
  type: float

- id: switcher_key2_chroma_key_soft
  section: 2
  control: 71
  type: float

- id: switcher_key2_chroma_key_shrink
  section: 2
  control: 72
  type: float

- id: switcher_key2_chroma_bgnd_suppress
  section: 2
  control: 73
  type: integer

- id: switcher_key2_mask_left
  section: 2
  control: 74
  type: float

- id: switcher_key2_mask_right
  section: 2
  control: 75
  type: float

- id: switcher_key2_mask_top
  section: 2
  control: 76
  type: float

- id: switcher_key2_mask_bottom
  section: 2
  control: 77
  type: float

- id: switcher_key2_mask_enable
  section: 2
  control: 78
  type: integer

# Transition controls (79..90)
- id: switcher_trans_bgnd
  section: 2
  control: 79
  type: flag

- id: switcher_trans_key1
  section: 2
  control: 80
  type: flag

- id: switcher_trans_key2
  section: 2
  control: 81
  type: flag

- id: switcher_trans_priority
  section: 2
  control: 82
  type: flag

- id: switcher_trans_preview
  section: 2
  control: 83
  type: flag

- id: switcher_trans_reverse
  section: 2
  control: 84
  type: flag

- id: switcher_trans_normal_rev
  section: 2
  control: 85
  type: flag

- id: switcher_pgm_src
  section: 2
  control: 86
  type: integer
  description: M/E Program Source (same encoding as Keyer source)

- id: switcher_pst_src
  section: 2
  control: 87
  type: integer
  description: M/E Preset Source

- id: switcher_trans_type
  section: 2
  control: 88
  type: enum
  values_source: ["0: Mix", "1: Wipe"]

- id: switcher_key_priority
  section: 2
  control: 90
  type: flag
  description: "0: K1 bottom/K2 top; 1: K1 top/K2 bottom"

# DSK1 (91..108) and DSK2 (109..126) - same pattern as Keyer 1, no chroma
- id: switcher_dsk1_keyer_on
  section: 2
  control: 91
  type: flag

- id: switcher_dsk1_key_src
  section: 2
  control: 92
  type: integer

- id: switcher_dsk1_split_src
  section: 2
  control: 93
  type: integer

- id: switcher_dsk1_linear_opacity
  section: 2
  control: 94
  type: float

- id: switcher_dsk1_linear_lift
  section: 2
  control: 95
  type: float
  range: [0.0, 100.0]

- id: switcher_dsk1_linear_gain
  section: 2
  control: 96
  type: float
  range: [0.0, 16.0]

- id: switcher_dsk1_linear_key_mode
  section: 2
  control: 97
  type: integer

- id: switcher_dsk1_linear_key_invert
  section: 2
  control: 98
  type: float

- id: switcher_dsk1_linear_key_sel_mode
  section: 2
  control: 99
  type: integer

- id: switcher_dsk1_linear_key_fill_mode
  section: 2
  control: 100
  type: integer

- id: switcher_dsk1_linear_matte_hue
  section: 2
  control: 101
  type: float

- id: switcher_dsk1_linear_matte_sat
  section: 2
  control: 102
  type: float

- id: switcher_dsk1_linear_matte_luma
  section: 2
  control: 103
  type: float

- id: switcher_dsk1_mask_left
  section: 2
  control: 104
  type: float

- id: switcher_dsk1_mask_right
  section: 2
  control: 105
  type: float

- id: switcher_dsk1_mask_top
  section: 2
  control: 106
  type: float

- id: switcher_dsk1_mask_bottom
  section: 2
  control: 107
  type: float

- id: switcher_dsk1_mask_enable
  section: 2
  control: 108
  type: flag

- id: switcher_dsk2_keyer_on
  section: 2
  control: 109
  type: flag

- id: switcher_dsk2_key_src
  section: 2
  control: 110
  type: integer

- id: switcher_dsk2_split_src
  section: 2
  control: 111
  type: integer

- id: switcher_dsk2_linear_opacity
  section: 2
  control: 112
  type: float

- id: switcher_dsk2_linear_lift
  section: 2
  control: 113
  type: float
  range: [0.0, 100.0]

- id: switcher_dsk2_linear_gain
  section: 2
  control: 114
  type: float
  range: [0.0, 16.0]

- id: switcher_dsk2_linear_key_mode
  section: 2
  control: 115
  type: integer

- id: switcher_dsk2_linear_key_invert
  section: 2
  control: 116
  type: float

- id: switcher_dsk2_linear_key_sel_mode
  section: 2
  control: 117
  type: integer

- id: switcher_dsk2_linear_key_fill_mode
  section: 2
  control: 118
  type: integer

- id: switcher_dsk2_linear_matte_hue
  section: 2
  control: 119
  type: float

- id: switcher_dsk2_linear_matte_sat
  section: 2
  control: 120
  type: float

- id: switcher_dsk2_linear_matte_luma
  section: 2
  control: 121
  type: float

- id: switcher_dsk2_mask_left
  section: 2
  control: 122
  type: float

- id: switcher_dsk2_mask_right
  section: 2
  control: 123
  type: float

- id: switcher_dsk2_mask_top
  section: 2
  control: 124
  type: float

- id: switcher_dsk2_mask_bottom
  section: 2
  control: 125
  type: float

- id: switcher_dsk2_mask_enable
  section: 2
  control: 126
  type: flag

# Additional DSK controls (127..129)
- id: switcher_dsk1_trans_enable
  section: 2
  control: 127
  type: flag

- id: switcher_dsk2_trans_enable
  section: 2
  control: 128
  type: flag

- id: switcher_dsk_trans_level
  section: 2
  control: 129
  type: float
  description: Read-only DSK transition level (progress)

# Bus Matte (130..132)
- id: switcher_bus_matte_hue
  section: 2
  control: 130
  type: float

- id: switcher_bus_matte_sat
  section: 2
  control: 131
  type: float

- id: switcher_bus_matte_luma
  section: 2
  control: 132
  type: float
  range: [0.0, 100.0]

# Fade to Black (133..135)
- id: switcher_ftb_enable
  section: 2
  control: 133
  type: flag

- id: switcher_ftb_dirn
  section: 2
  control: 134
  type: flag
  description: "0: fading down, 1: fading up"

- id: switcher_ftb_level
  section: 2
  control: 135
  type: float
  range: [0.0, 100.0]
  description: "Read-only FTB transition level (progress)"

# Flex Src (136..141)
- id: switcher_flex_src_bgnd_src
  section: 2
  control: 136
  type: integer

- id: switcher_flex_src_dve1_src
  section: 2
  control: 137
  type: integer

- id: switcher_flex_src_dve2_src
  section: 2
  control: 138
  type: integer

- id: switcher_flex_src_fgnd_src
  section: 2
  control: 139
  type: integer

- id: switcher_flex_src_fgnd_src_k
  section: 2
  control: 140
  type: integer

- id: switcher_flex_src_fgnd_enable
  section: 2
  control: 141
  type: flag

# Flex Src DVE1 (142..165) - position, size, crop, border
- id: switcher_flex_src_dve1_enable
  section: 2
  control: 142
  type: flag

- id: switcher_flex_src_dve1_position_x
  section: 2
  control: 143
  type: float
  range: [-16.0, 16.0]

- id: switcher_flex_src_dve1_position_y
  section: 2
  control: 144
  type: float
  range: [-16.0, 16.0]

- id: switcher_flex_src_dve1_position_z
  section: 2
  control: 145
  type: float
  range: [-16.0, 16.0]

- id: switcher_flex_src_dve1_size_x
  section: 2
  control: 147
  type: float
  range: [0.0, 16.0]

- id: switcher_flex_src_dve1_size_y
  section: 2
  control: 148
  type: float
  range: [0.0, 16.0]

- id: switcher_flex_src_dve1_size_z
  section: 2
  control: 149
  type: float
  range: [0.0, 16.0]

- id: switcher_flex_src_dve1_crop_size
  section: 2
  control: 150
  type: float

- id: switcher_flex_src_dve1_crop_left
  section: 2
  control: 151
  type: float

- id: switcher_flex_src_dve1_crop_right
  section: 2
  control: 152
  type: float

- id: switcher_flex_src_dve1_crop_top
  section: 2
  control: 153
  type: float

- id: switcher_flex_src_dve1_crop_bottom
  section: 2
  control: 154
  type: float

- id: switcher_flex_src_dve1_crop_soft
  section: 2
  control: 155
  type: float

- id: switcher_flex_src_dve1_border_size
  section: 2
  control: 156
  type: float

- id: switcher_flex_src_dve1_border_left
  section: 2
  control: 157
  type: float

- id: switcher_flex_src_dve1_border_right
  section: 2
  control: 158
  type: float

- id: switcher_flex_src_dve1_border_top
  section: 2
  control: 159
  type: float

- id: switcher_flex_src_dve1_border_bottom
  section: 2
  control: 160
  type: float

- id: switcher_flex_src_dve1_border_soft
  section: 2
  control: 161
  type: float

- id: switcher_flex_src_dve1_border_style
  section: 2
  control: 162
  type: float
  description: "0: Off, 1: Normal (only two styles supported)"

- id: switcher_flex_src_dve1_border_hue
  section: 2
  control: 163
  type: float

- id: switcher_flex_src_dve1_border_sat
  section: 2
  control: 164
  type: float

- id: switcher_flex_src_dve1_border_luma
  section: 2
  control: 165
  type: float

# Section 3 = INPUT (per-channel; channel encoded in command bits [7:4])
- id: input_proc_amp_black_level
  section: 3
  control: 0
  type: float

- id: input_proc_amp_chroma_gain
  section: 3
  control: 1
  type: float
  range: [0.0, 16.0]

- id: input_proc_amp_white_clip
  section: 3
  control: 2
  type: float

- id: input_valid
  section: 3
  control: 3
  type: boolean

- id: input_mode
  section: 3
  control: 4
  type: integer

- id: input_freeze_mode
  section: 3
  control: 5
  type: enum
  values_source:
    - "0: Live"
    - "1: Freeze"
    - "2: Still"
    - "3: Clip"
    - "4: Capture"

- id: input_frame_mode
  section: 3
  control: 6
  type: enum
  values_source: ["0: Frame", "1: Field", "2: Video & Key"]

- id: input_remap
  section: 3
  control: 7
  type: integer
  range: [0, 6]
  description: "0=source not used; 1-6=physical source used"

- id: input_freeze_still_load
  section: 3
  control: 8
  type: flag

- id: input_freeze_still_num
  section: 3
  control: 9
  type: integer

# Section 4 = INPUT_CTRL (common)
- id: input_dvi_input_enable
  section: 4
  control: 0
  type: boolean
  description: "Enables DVI Input onto Input 7"

- id: input_enable_remap
  section: 4
  control: 1
  type: boolean

# Section 5 = OUTPUT_CTRL
- id: output_multiviewer_mode
  section: 5
  control: 4
  type: integer
  description: Not used in SE-1200 per source

- id: output_multiviewer_main1_src
  section: 5
  control: 5
  type: integer

- id: output_multiviewer_transp_labels
  section: 5
  control: 9
  type: boolean

- id: output_multiviewer_auto_num
  section: 5
  control: 10
  type: boolean

- id: output_multiviewer_label_info
  section: 5
  control: 11
  type: boolean

- id: output_analog_out_select
  section: 5
  control: 12
  type: integer

- id: output_analog_out_mode
  section: 5
  control: 13
  type: integer

- id: output_analog_out_sync_mode
  section: 5
  control: 14
  type: integer

- id: output_dvi_out_select
  section: 5
  control: 15
  type: enum
  values_source:
    - "0: PGM"
    - "1: PVW"
    - "2: PGM DSK1"
    - "3: PVW DSK1"
    - "4: Multiviewer"

- id: output_multi_out1_select
  section: 5
  control: 16
  type: integer
  description: Same selections as DVI Out

# Section 6 = AUDIO_CTRL
- id: audio_source
  section: 6
  control: 0
  type: enum
  values_source:
    - "0: Audio Follow Video"
    - "1-4: Inputs 1-4"

- id: audio_chan
  section: 6
  control: 1
  type: enum
  values_source:
    - "0: Chan 1&2"
    - "1: Chan 3&4"
    - "2: Chan 5&6"
    - "3: Chan 7&8"
    - "4: Chan 9&10"
    - "5: Chan 11&12"
    - "6: Chan 13&14"
    - "7: Chan 15&16"

- id: audio_mode
  section: 6
  control: 2
  type: enum
  values_source: ["0: Off", "1: Digital", "2: Analog", "3: Test"]

# Section 7 = TRANSITION_CTRL (M/E, DSK, FTB engines - each has command/type/state/duration/dirn)
- id: me_trans_command
  section: 7
  control: 0
  type: enum
  values_source:
    - "0: Stop"
    - "1: Run"
    - "2: Pause"
    - "3: Continue"
    - "4: Goto Start"
    - "5: Goto End"
    - "6: Restart"
    - "7: Stop And Clear"
    - "8: Ready"

- id: me_trans_type
  section: 7
  control: 1
  type: enum
  values_source: ["0: One Shot", "1: Loop", "2: PingPong"]

- id: me_trans_state
  section: 7
  control: 2
  type: enum
  values_source: ["0: Stopped", "1: At Start", "2: Running", "3: At End", "4: Paused"]

- id: me_trans_duration
  section: 7
  control: 3
  type: integer
  description: Duration in frames

- id: me_trans_dirn
  section: 7
  control: 4
  type: enum
  values_source: ["0: Forwards", "1: Reverse"]

- id: dsk_trans_command
  section: 7
  control: 5
  type: integer
  description: Same enum as ME_TRANS_COMMAND

- id: dsk_trans_type
  section: 7
  control: 6
  type: integer

- id: dsk_trans_state
  section: 7
  control: 7
  type: integer

- id: dsk_trans_duration
  section: 7
  control: 8
  type: integer

- id: dsk_trans_dirn
  section: 7
  control: 9
  type: integer

- id: ftb_trans_command
  section: 7
  control: 10
  type: integer

- id: ftb_trans_type
  section: 7
  control: 11
  type: integer

- id: ftb_trans_state
  section: 7
  control: 12
  type: integer

- id: ftb_trans_duration
  section: 7
  control: 13
  type: integer

- id: ftb_trans_dirn
  section: 7
  control: 14
  type: integer

# Section 8 = MEMORY_CTRL
- id: memory_select
  section: 8
  control: 0
  type: integer
  range: [0, 1000]
  description: "0-999 general; 1000=system memory"

- id: memory_command
  section: 8
  control: 1
  type: enum
  values_source:
    - "0: DV_MEMORY_READY (status)"
    - "1: DV_MEMORY_LOAD"
    - "2: DV_MEMORY_STORE"
    - "3: DV_MEMORY_DELETE"

- id: memory_state
  section: 8
  control: 2
  type: enum
  values_source: ["0: Ready", "1: Busy", "2: Error"]

- id: memory_result
  section: 8
  control: 3
  type: enum
  values_source: ["0: OK", "1: Fail", "2: Not Found", "3: Illegal Command", "4: Illegal Value"]

- id: memory_event
  section: 8
  control: 4
  type: integer

- id: memory_flags
  section: 8
  control: 5
  type: integer
  description: |
    Bit-packed memory section flags (1 bit per word, not packed).
    Bits: ENABLE, SWITCHER_SRC, FLEX_SRC_SRC, SWITCHER, FLEX_SRC, AUX_BUS,
    MULTIVIEWER, AUDIO, INPUTS, OUTPUTS.

- id: memory_load_all_sections
  section: 8
  control: 6
  type: flag
  description: Override memory flags and load all sections; auto-clears after use

# Section 10 = STILL_CTRL
- id: still_select
  section: 10
  control: 0
  type: integer
  range: [0, 100]

- id: still_buf
  section: 10
  control: 1
  type: integer
  range: [0, 7]
  description: 8 still buffers

- id: still_command
  section: 10
  control: 2
  type: enum
  values_source:
    - "0: DV_STILL_READY (status)"
    - "1: DV_STILL_LOAD"
    - "2: DV_STILL_STORE"
    - "3: DV_STILL_GRAB"
    - "4: DV_STILL_DELETE"

- id: still_state
  section: 10
  control: 3
  type: enum
  values_source: ["0: Ready", "1: Busy", "2: Error"]

- id: still_result
  section: 10
  control: 4
  type: enum
  values_source: ["0: OK", "1: Fail", "2: Not Found", "3: Illegal Command", "4: Illegal Value"]

- id: still_event
  section: 10
  control: 5
  type: integer

# Section 12 = STREAMER_CTRL
- id: streamer_command
  section: 12
  control: 0
  type: integer

- id: streamer_codec
  section: 12
  control: 1
  type: integer

- id: streamer_size
  section: 12
  control: 2
  type: enum
  values_source:
    - "0: Full Size"
    - "1: Half Size"
    - "2: Quarter Size"
    - "3: Sixth Size"
  description: Only STREAMER_SIZE implemented in current software per source

- id: streamer_quality
  section: 12
  control: 3
  type: integer

Events

# Real-Time Protocol pushes Parameter/Value packets to the Controller at field
# rate. Any control that changes (locally, or from another Controller) is
# pushed. The Controller must reply to every packet.
- id: rt_param_value_update
  description: |
    Unsolicited Parameter/Value packet on Real-Time port (e.g. 5003). Format
    identical to SET_CONTROL. Multiple (section, control, value) tuples per
    packet. Reply required (null packet or echo of changed values).

- id: rt_null_packet
  description: 8-byte null packet. Reply required to keep protocol in sync.

- id: memory_event_change
  description: |
    Section 8 control 4 (MEMORY_EVENT) increments when another controller
    Stores or Deletes a memory. Use to redraw memory list GUIs.

- id: still_event_change
  description: |
    Section 10 control 5 (STILL_EVENT) increments when another controller
    Stores or Deletes a still.

- id: first_packet_full_state
  description: |
    The first packet the Processor Unit sends after Real-Time connection
    contains the full machine state; controllers should reset local state
    to all-zeros before connecting so the first packet populates it.

Macros

# UNRESOLVED: source does not document any pre-defined macro sequences or
# multi-step recipes; only individual command opcodes and transition engines.
# No transitions to enumerate as macros because ME_TRANS_COMMAND/DSK/FTB
# engines already encode the full transition state machine.

Safety

confirmation_required_for: []
interlocks: []
# UNRESOLVED: source contains no safety warnings, interlock procedures, or
# power-on sequencing requirements. Voltage/current/power specs absent.

Notes

  • Protocol is binary 32-bit DWORD-oriented; no ASCII command set, no terminators, no checksums. All values 32-bit signed int or IEEE-754 float.
  • Four paired (Real-Time, Command) port pairs: (5001,5002), (5003,5004), (5005,5006), (5007,5008). Port 5001/5002 reserved for the hardware Control Panel; external controllers can use them when the panel is absent.
  • Source warns explicitly: "When connecting using the Command protocol, be sure to use even port numbers (5002, 5004, 5006, 5008)". Connecting to Real-Time ports with Command Protocol appears to work initially but eventually desyncs.
  • Connection Request Channel (port 5009) returns a free Real-Time port. Add +1 to get the matching Command port.
  • SET_CONTROL and GET_CONTROL take Parameter1 = (Section << 16) | Control. Many (section, control, value) tuples may be packed into a single packet.
  • Transition Engines (M/E, DSK, FTB) operate at field rate. Source: "The Transition Engine only processes command[s] at the Field Interval, it is important to wait until a command has been processed (by checking for 'Ready') before checking the Transition State."
  • DV_CONTROL_SECTION_SWITCHER exposes >300 control variables across wipe, keyer 1, keyer 2, transitions, DSK1, DSK2, bus matte, FTB, flex src, and flex src DVE.
  • Flex Src is not a true Flex Src processor; SE-1200 has a single 2D resizeable DVE tile exposed as Flex Src DVE1.
  • Chroma Keyer available on Keyer 1 & Keyer 2 only; not on DSK1/DSK2.
  • Memory 1000 is the system memory (always loaded at boot). Memory 0 always loads after system memory at boot.
  • STREAMER_SIZE is the only implemented control in STREAMER_CTRL in current software per source.
  • Mini-Pic is 96x54 px, 32 bpp, RGBA (R[7:0], G[15:8], B[23:16]).
  • Source document refers to software v1.3.3.x; compatibility range not stated.
  • Auth: no login/password procedure described anywhere in the document; TCP sockets connect directly to the listed ports.

Provenance

source_domains:
  - github.com
  - datavideo.com
  - datavideo.zendesk.com
source_urls:
  - "https://github.com/RoseOO/datavideo-dvip-docs/raw/refs/heads/master/SE1200MU/Datavideo%20SE-1200%20Ethernet%20Control%20Protocol_E1%2020190710.pdf"
  - https://www.datavideo.com/us/faq/360058612373
  - https://www.datavideo.com/us/faq/360058611993
  - https://www.datavideo.com/us/protocol/list
  - https://datavideo.zendesk.com/hc/en-us/articles/360058612373-SE-1200MU-RS-232-serial-commands-Crestron-control-and-command-strings-examples
retrieved_at: 2026-05-18T06:31:11.014Z
last_checked_at: 2026-06-02T21:41:38.843Z

Verification Summary

verdict: verified
checked_at: 2026-06-02T21:41:38.843Z
matched_actions: 26
action_count: 26
confidence: medium
summary: "All 26 spec action units matched verbatim to source opcodes, sub-commands, and RT protocol packets; transport values confirmed; source command catalogue fully covered. (4 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "firmware version range not stated (source refers to v1.3.3.x only); voltage/current/power specs absent; protocol version absent."
- "source does not document any pre-defined macro sequences or"
- "source contains no safety warnings, interlock procedures, or"
- "voltage/current/power specs absent; protocol version number absent; firmware compatibility range beyond v1.3.3.x not stated; configurable IP / DHCP / multi-unit behavior available \"through host configuration files, which are not normally made available to the user\" — not formally documented."

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