Summary

Binary control protocol for NEC NP MC3xxXG, MC3xxWG, and MC4xxXG series projectors over RS-232C and wired LAN (TCP port 7142). Commands are framed as hex byte sequences; each command emits an acknowledgement response. Covers power, input switching, picture/sound/onscreen mute, picture/volume/aspect/lamp adjustments, lens control and memory, information requests, error status, and remote-key emulation.

Transport

protocols:
  - serial
  - tcp
addressing:
  port: 7142
serial:
  baud_rate: 115200  # source lists 115200/38400/19200/9600/4800; highest listed
  data_bits: 8
  parity: none
  stop_bits: 1
  flow_control: full_duplex
auth:
  type: none  # inferred: no auth procedure in source

Traits

- powerable       # POWER ON / POWER OFF commands present
- routable        # INPUT SW CHANGE present
- queryable       # ERROR STATUS REQUEST, INFORMATION REQUEST, LAMP/FILTER INFO REQUESTS present
- levelable       # PICTURE ADJUST (brightness/contrast/color/hue/sharpness), VOLUME ADJUST, LAMP ADJUST present

Actions

- id: error_status_request
  label: Error Status Request (009)
  kind: query
  command: "00h 88h 00h 00h 00h 88h"
  params: []

- id: power_on
  label: Power On (015)
  kind: action
  command: "02h 00h 00h 00h 00h 02h"
  params: []

- id: power_off
  label: Power Off (016)
  kind: action
  command: "02h 01h 00h 00h 00h 03h"
  params: []

- id: input_switch_change
  label: Input Switch Change (018)
  kind: action
  command: "02h 03h 00h 00h 02h 01h {DATA01} {CKS}"
  params:
    - name: DATA01
      type: integer
      description: Input terminal code (see Appendix "Supplementary Information by Command")

- id: picture_mute_on
  label: Picture Mute On (020)
  kind: action
  command: "02h 10h 00h 00h 00h 12h"
  params: []

- id: picture_mute_off
  label: Picture Mute Off (021)
  kind: action
  command: "02h 11h 00h 00h 00h 13h"
  params: []

- id: sound_mute_on
  label: Sound Mute On (022)
  kind: action
  command: "02h 12h 00h 00h 00h 14h"
  params: []

- id: sound_mute_off
  label: Sound Mute Off (023)
  kind: action
  command: "02h 13h 00h 00h 00h 15h"
  params: []

- id: onscreen_mute_on
  label: Onscreen Mute On (024)
  kind: action
  command: "02h 14h 00h 00h 00h 16h"
  params: []

- id: onscreen_mute_off
  label: Onscreen Mute Off (025)
  kind: action
  command: "02h 15h 00h 00h 00h 17h"
  params: []

- id: picture_adjust
  label: Picture Adjust (030-1)
  kind: action
  command: "03h 10h 00h 00h 05h {target} {FFh} {mode} {value_lo} {value_hi} {CKS}"
  params:
    - name: target
      type: integer
      description: "00h=Brightness, 01h=Contrast, 02h=Color, 03h=Hue, 04h=Sharpness"
    - name: mode
      type: integer
      description: "00h=absolute, 01h=relative"
    - name: value_lo
      type: integer
      description: Adjustment value low-order 8 bits
    - name: value_hi
      type: integer
      description: Adjustment value high-order 8 bits

- id: volume_adjust
  label: Volume Adjust (030-2)
  kind: action
  command: "03h 10h 00h 00h 05h 05h 00h {mode} {value_lo} {value_hi} {CKS}"
  params:
    - name: mode
      type: integer
      description: "00h=absolute, 01h=relative"
    - name: value_lo
      type: integer
      description: Adjustment value low-order 8 bits
    - name: value_hi
      type: integer
      description: Adjustment value high-order 8 bits

- id: aspect_adjust
  label: Aspect Adjust (030-12)
  kind: action
  command: "03h 10h 00h 00h 05h 18h 00h 00h {DATA01} 00h {CKS}"
  params:
    - name: DATA01
      type: integer
      description: Aspect value (see Appendix "Supplementary Information by Command")

- id: lamp_adjust
  label: Lamp Adjust / Light Adjust (030-15)
  kind: action
  command: "03h 10h 00h 00h 05h 96h FFh {mode} {value_lo} {value_hi} {CKS}"
  params:
    - name: mode
      type: integer
      description: "00h=absolute, 01h=relative"
    - name: value_lo
      type: integer
      description: Adjustment value low-order 8 bits
    - name: value_hi
      type: integer
      description: Adjustment value high-order 8 bits

- id: information_request
  label: Information Request (037)
  kind: query
  command: "03h 8Ah 00h 00h 00h 8Dh"
  params: []

- id: filter_usage_information_request
  label: Filter Usage Information Request (037-3)
  kind: query
  command: "03h 95h 00h 00h 00h 98h"
  params: []

- id: lamp_information_request_3
  label: Lamp Information Request 3 (037-4)
  kind: query
  command: "03h 96h 00h 00h 02h {lamp} {content} {CKS}"
  params:
    - name: lamp
      type: integer
      description: "00h=Lamp 1, 01h=Lamp 2 (two-lamp models only)"
    - name: content
      type: integer
      description: "01h=usage time (seconds), 04h=remaining life (%)"

- id: carbon_savings_information_request
  label: Carbon Savings Information Request (037-6)
  kind: query
  command: "03h 9Ah 00h 00h 01h {DATA01} {CKS}"
  params:
    - name: DATA01
      type: integer
      description: "00h=Total Carbon Savings, 01h=Carbon Savings during operation"

- id: remote_key_power_on
  label: Remote Key - POWER ON
  kind: action
  command: "02h 0Fh 00h 00h 02h 02h 00h {CKS}"
  params: []

- id: remote_key_power_off
  label: Remote Key - POWER OFF
  kind: action
  command: "02h 0Fh 00h 00h 02h 03h 00h {CKS}"
  params: []

- id: remote_key_auto
  label: Remote Key - AUTO
  kind: action
  command: "02h 0Fh 00h 00h 02h 05h 00h {CKS}"
  params: []

- id: remote_key_menu
  label: Remote Key - MENU
  kind: action
  command: "02h 0Fh 00h 00h 02h 06h 00h {CKS}"
  params: []

- id: remote_key_up
  label: Remote Key - UP
  kind: action
  command: "02h 0Fh 00h 00h 02h 07h 00h {CKS}"
  params: []

- id: remote_key_down
  label: Remote Key - DOWN
  kind: action
  command: "02h 0Fh 00h 00h 02h 08h 00h {CKS}"
  params: []

- id: remote_key_right
  label: Remote Key - RIGHT
  kind: action
  command: "02h 0Fh 00h 00h 02h 09h 00h {CKS}"
  params: []

- id: remote_key_left
  label: Remote Key - LEFT
  kind: action
  command: "02h 0Fh 00h 00h 02h 0Ah 00h {CKS}"
  params: []

- id: remote_key_enter
  label: Remote Key - ENTER
  kind: action
  command: "02h 0Fh 00h 00h 02h 0Bh 00h {CKS}"
  params: []

- id: remote_key_exit
  label: Remote Key - EXIT
  kind: action
  command: "02h 0Fh 00h 00h 02h 0Ch 00h {CKS}"
  params: []

- id: remote_key_help
  label: Remote Key - HELP
  kind: action
  command: "02h 0Fh 00h 00h 02h 0Dh 00h {CKS}"
  params: []

- id: remote_key_magnify_up
  label: Remote Key - MAGNIFY UP
  kind: action
  command: "02h 0Fh 00h 00h 02h 0Fh 00h {CKS}"
  params: []

- id: remote_key_magnify_down
  label: Remote Key - MAGNIFY DOWN
  kind: action
  command: "02h 0Fh 00h 00h 02h 10h 00h {CKS}"
  params: []

- id: remote_key_mute
  label: Remote Key - MUTE
  kind: action
  command: "02h 0Fh 00h 00h 02h 13h 00h {CKS}"
  params: []

- id: remote_key_picture
  label: Remote Key - PICTURE
  kind: action
  command: "02h 0Fh 00h 00h 02h 29h 00h {CKS}"
  params: []

- id: remote_key_computer1
  label: Remote Key - COMPUTER1
  kind: action
  command: "02h 0Fh 00h 00h 02h 4Bh 00h {CKS}"
  params: []

- id: remote_key_computer2
  label: Remote Key - COMPUTER2
  kind: action
  command: "02h 0Fh 00h 00h 02h 4Ch 00h {CKS}"
  params: []

- id: remote_key_video1
  label: Remote Key - VIDEO1
  kind: action
  command: "02h 0Fh 00h 00h 02h 4Fh 00h {CKS}"
  params: []

- id: remote_key_svideo1
  label: Remote Key - S-VIDEO1
  kind: action
  command: "02h 0Fh 00h 00h 02h 51h 00h {CKS}"
  params: []

- id: remote_key_volume_up
  label: Remote Key - VOLUME UP
  kind: action
  command: "02h 0Fh 00h 00h 02h 84h 00h {CKS}"
  params: []

- id: remote_key_volume_down
  label: Remote Key - VOLUME DOWN
  kind: action
  command: "02h 0Fh 00h 00h 02h 85h 00h {CKS}"
  params: []

- id: remote_key_freeze
  label: Remote Key - FREEZE
  kind: action
  command: "02h 0Fh 00h 00h 02h 8Ah 00h {CKS}"
  params: []

- id: remote_key_aspect
  label: Remote Key - ASPECT
  kind: action
  command: "02h 0Fh 00h 00h 02h A3h 00h {CKS}"
  params: []

- id: remote_key_source
  label: Remote Key - SOURCE
  kind: action
  command: "02h 0Fh 00h 00h 02h D7h 00h {CKS}"
  params: []

- id: remote_key_lamp_mode_eco
  label: Remote Key - LAMP MODE / ECO
  kind: action
  command: "02h 0Fh 00h 00h 02h EEh 00h {CKS}"
  params: []

- id: shutter_close
  label: Shutter Close (051)
  kind: action
  command: "02h 16h 00h 00h 00h 18h"
  params: []

- id: shutter_open
  label: Shutter Open (052)
  kind: action
  command: "02h 17h 00h 00h 00h 19h"
  params: []

- id: lens_control
  label: Lens Control - Periphery Focus (053)
  kind: action
  command: "02h 18h 00h 00h 02h 06h {direction} {CKS}"
  params:
    - name: direction
      type: integer
      description: "00h=Stop, 01h=+1s, 02h=+0.5s, 03h=+0.25s, 7Fh=+continuous, 81h=-continuous, FDh=-0.25s, FEh=-0.5s, FFh=-1s"

- id: lens_control_request
  label: Lens Control Request (053-1)
  kind: query
  command: "02h 1Ch 00h 00h 02h {DATA01} 00h {CKS}"
  params:
    - name: DATA01
      type: integer
      description: Lens axis selector

- id: lens_control_2
  label: Lens Control 2 (053-2)
  kind: action
  command: "02h 1Dh 00h 00h 04h {DATA01} {mode} {value_lo} {value_hi} {CKS}"
  params:
    - name: DATA01
      type: integer
      description: "FFh=Stop (then mode/value ignored)"
    - name: mode
      type: integer
      description: "00h=absolute, 02h=relative"
    - name: value_lo
      type: integer
      description: Adjustment value low-order 8 bits
    - name: value_hi
      type: integer
      description: Adjustment value high-order 8 bits

- id: lens_memory_control
  label: Lens Memory Control (053-3)
  kind: action
  command: "02h 1Eh 00h 00h 01h {op} {CKS}"
  params:
    - name: op
      type: integer
      description: "00h=MOVE, 01h=STORE, 02h=RESET"

- id: reference_lens_memory_control
  label: Reference Lens Memory Control (053-4)
  kind: action
  command: "02h 1Fh 00h 00h 01h {op} {CKS}"
  params:
    - name: op
      type: integer
      description: "00h=MOVE, 01h=STORE, 02h=RESET"

- id: lens_memory_option_request
  label: Lens Memory Option Request (053-5)
  kind: query
  command: "02h 20h 00h 00h 01h {DATA01} {CKS}"
  params:
    - name: DATA01
      type: integer
      description: "00h=LOAD BY SIGNAL, 01h=FORCED MUTE"

- id: lens_memory_option_set
  label: Lens Memory Option Set (053-6)
  kind: action
  command: "02h 21h 00h 00h 02h {DATA01} {DATA02} {CKS}"
  params:
    - name: DATA01
      type: integer
      description: "00h=LOAD BY SIGNAL, 01h=FORCED MUTE"
    - name: DATA02
      type: integer
      description: "00h=OFF, 01h=ON"

- id: lens_information_request
  label: Lens Information Request (053-7)
  kind: query
  command: "02h 22h 00h 00h 01h 00h 25h"
  params: []

- id: lens_profile_set
  label: Lens Profile Set (053-10)
  kind: action
  command: "02h 27h 00h 00h 01h {DATA01} {CKS}"
  params:
    - name: DATA01
      type: integer
      description: "00h=Profile 1, 01h=Profile 2"

Feedbacks

- id: error_status
  type: object
  description: |
    12-byte error information returned by 009 ERROR STATUS REQUEST.
    Bit = 0 normal, Bit = 1 error.
  fields:
    DATA01:
      type: bits
      description: "Bit0=Cover, Bit1=Temperature (bi-metallic), Bit2=reserved, Bit3=Fan, Bit4=Fan, Bit5=Power, Bit6=Lamp1 off, Bit7=Lamp1 replacement moratorium"
    DATA02:
      type: bits
      description: "Bit0=Lamp1 usage exceeded, Bit1=Formatter, Bit2=Lamp2 off, Bit7=Refer to extended status"
    DATA03:
      type: bits
      description: "Bit1=FPGA, Bit2=Temperature (sensor), Bit3=Lamp1 not present, Bit4=Lamp1 data, Bit5=Mirror cover, Bit6=Lamp2 moratorium, Bit7=Lamp2 usage exceeded"
    DATA04:
      type: bits
      description: "Bit0=Lamp2 not present, Bit1=Lamp2 data, Bit2=Temperature due to dust, Bit3=Foreign matter sensor, Bit5=Ballast comms, Bit6=Iris calibration, Bit7=Lens not installed"
    DATA09:
      type: bits
      description: "Bit0=Portrait cover side up, Bit1=Interlock open, Bit2=System error (Slave CPU), Bit3=System error (Formatter)"

- id: ack_response
  type: object
  description: |
    Standard command acknowledgement. Successful execution: command-specific data
    frame. Failure: A_/2_/... prefix frame carrying ERR1 and ERR2 error codes.

- id: input_switch_response
  type: enum
  values: [ok, ff_no_signal]
  description: |
    Response DATA01 returned by 018 INPUT SW CHANGE. FFh = ended with error
    (no signal switch made).

- id: adjust_execution_result
  type: enum
  values: [0000h_success, other_error]
  description: "DATA01/DATA02 = 0000h on success, non-zero on error. Returned by 030-1, 030-2, 030-12, 030-15."

- id: remote_key_response
  type: enum
  values: [ok, ff_error]
  description: "DATA01 = FFh indicates remote-key command ended with an error."

- id: lens_control_response
  type: enum
  values: [ok, ff_error]
  description: "DATA01 = FFh indicates lens-control command ended with an error."

- id: lens_memory_response
  type: enum
  values: [move, store, reset, ff_error]
  description: "DATA01 from 053-3 / 053-4 responses."

- id: lamp_information
  type: object
  description: |
    Response from 037-4 LAMP INFORMATION REQUEST 3.
    DATA01 echoes lamp selector, DATA02 echoes content selector,
    DATA03-DATA06 carries the requested value (seconds for usage, percent for life).
    Negative remaining-life value = replacement deadline exceeded.

- id: filter_information
  type: object
  description: |
    Response from 037-3 FILTER USAGE INFORMATION REQUEST.
    DATA01-DATA04 = usage time (seconds); DATA05-DATA08 = alarm start time (seconds).
    -1 returned if no time defined.

- id: projector_information
  type: object
  description: |
    Response from 037 INFORMATION REQUEST.
    DATA01-DATA49 = projector name (NUL-terminated string).
    DATA83-DATA86 = lamp usage time (seconds, one-minute update interval).
    DATA87-DATA90 = filter usage time (seconds).

Variables

# Source documents discrete opcode per setting value (e.g. remote-key codes, aspect values, input-terminal codes, lens direction bytes). No settable continuous parameters are exposed as separate variables beyond what is encoded into the action commands above.
# UNRESOLVED: no continuous parameters documented outside of the action command payloads themselves.

Events

# UNRESOLVED: source does not document unsolicited device-to-host notifications.

Macros

# UNRESOLVED: no multi-step sequences described in source.

Safety

confirmation_required_for:
  - power_off
  - shutter_close
interlocks:
  - id: portrait_cover_side_up
    description: "DATA09 Bit0 - portrait cover side is up; projector will refuse unsafe operations."
  - id: interlock_switch_open
    description: "DATA09 Bit1 - interlock switch open; lamp/light cannot be safely energized."
  - id: lens_not_installed
    description: "DATA04 Bit7 - lens is not installed properly."
# UNRESOLVED: lamp replacement moratorium and usage-exceeded thresholds (the source notes the condition exists but does not state specific hour limits per model).

Notes

  • Framing. Every command is a hex byte sequence. The CKS byte is the low-order one byte of the sum of all preceding bytes (see source §2.2 "Example of checksum calculation"). Templates above show {CKS} as the final byte — implementer computes it.
  • ID1 / ID2. Every request and response carries (Control ID, configured on the projector) and (model code, varies per model). Templates above omit these for clarity; append {ID1} {ID2} before CKS as shown in the source frames.
  • Baud rate selection. Source lists 115200 / 38400 / 19200 / 9600 / 4800 bps as valid options. Spec declares 115200 because source lists it first; lower rates are likely fall-back options but the source does not state when each is selected.
  • Per-model capability. Source repeatedly defers to "Appendix 'Connecting an External Device'" and "Appendix 'Supplementary Information by Command'" for model-specific input-terminal codes, aspect values, and which commands each model supports. Those appendices are not included in this excerpt.
  • Standby command reception. Source notes "Some models cannot receive commands in standby mode" without listing which — see Appendix "Standby Mode setting for receiving commands".
  • No auth. Neither RS-232C nor LAN commands require login. Anyone with physical or network access can drive the projector.
  • Two-lamp models. DATA01 = 01h in lamp commands only valid for two-lamp projector models (unspecified which).

Self-check:
- [x] no voltage/current/power values invented
- [x] port 7142 stated verbatim in source
- [x] baud rate / data bits / parity / stop bits all stated in source
- [x] `status: draft`, `declared_confidence: low` set
- [x] YAML blocks use quoted commands with hex bytes verbatim
- [x] `entity_id` placeholder left as `FILL_IN_FROM_CONVEX`
- [x] UNRESOLVED markers present for gaps (per-model matrix, WLAN auth, unsolicited events, macros, lamp thresholds)

## Provenance

```yaml
source_domains:
  - sharpdisplays.eu
source_urls:
  - https://www.sharpdisplays.eu/p/download/cp/Products/Projectors/Shared/CommandLists/NEC-ExternalControlManual-english.pdf
retrieved_at: 2026-05-13T08:28:53.578Z
last_checked_at: 2026-09-15T22:16:43.264Z

Verification Summary

verdict: verified
checked_at: 2026-09-15T22:16:43.264Z
matched_actions: 54
action_count: 54
confidence: medium
summary: "All 54 spec action units map to hex byte sequences documented verbatim in source sections 3.1–3.30; transport values verbatim at source §1.2/§Port number. (7 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "per-model capability matrix (which models support which commands) — source defers to appendix \"Connecting an External Device\" / \"Supplementary Information by Command\" not included in this excerpt"
- "LAN connection has no documented authentication or encryption"
- "WLAN specifics deferred to model-specific wireless-LAN-unit manual"
- "no continuous parameters documented outside of the action command payloads themselves."
- "source does not document unsolicited device-to-host notifications."
- "no multi-step sequences described in source."
- "lamp replacement moratorium and usage-exceeded thresholds (the source notes the condition exists but does not state specific hour limits per model)."

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