Summary
Draper MC1 motor controller (used in LS101 screen line) supports two-way RS-232 serial control at 9600 8N1. Commands follow *<subsystem><cmd><channel><time>; framing with ASCII payloads to open, close, stop, program, and query motorized screen position.
Transport
protocols:
- serial
serial:
baud_rate: 9600
data_bits: 8
parity: none
stop_bits: 1
flow_control: xon_xoff # source documents X-on/X-off (Ctrl-Q/Ctrl-S) buffer flow control
auth:
type: none # inferred: no auth procedure in source
Traits
- powerable # inferred: open/close drive screen up/down (effective on/off motion control)
- queryable # inferred from "r" position query and "V" version query
- routable # inferred: subsystem/channel addressing routes commands to specific units on bus
Actions
- id: open
label: Open (raise screen)
kind: action
command: "*{subsystem}o{channel}{time};"
params:
- name: subsystem
type: string
description: "Subsystem number: 00=ALL, 02-7 if BUS, 7-99 if Radio"
- name: channel
type: string
description: "Channel 00-60 (00=ALL, 60=cut strap ALL)"
- name: time
type: string
description: "Optional duration in 1/20 seconds (000-999, 000=forever); if omitted command runs 2 seconds default"
- id: close
label: Close (lower screen)
kind: action
command: "*{subsystem}c{channel}{time};"
params:
- name: subsystem
type: string
- name: channel
type: string
- name: time
type: string
description: "Optional 1/20 second units"
- id: stop
label: Stop motion
kind: action
command: "*{subsystem}s;"
params:
- name: subsystem
type: string
description: "Channel optional/ignored for stop command"
- id: program
label: Program mode
kind: action
command: "*{subsystem}p{channel}{time};"
params:
- name: subsystem
type: string
- name: channel
type: string
- name: time
type: string
description: "Default duration ¼ second when omitted"
- id: program_accessor
label: Program accessor
kind: action
command: "*{subsystem}a{channel}{time};"
params:
- name: subsystem
type: string
- name: channel
type: string
- name: time
type: string
- id: quit_sending
label: Quit forever command
kind: action
command: "*{subsystem}q;"
params:
- name: subsystem
type: string
description: "Stop a forever (time=000) transmission cleanly without error"
- id: version_query
label: Report firmware version
kind: query
command: "*{subsystem}V;"
params:
- name: subsystem
type: string
description: "All characters after V are ignored"
- id: set_port7_radio
label: Set port 7 to Radio mode
kind: action
command: "*{subsystem}R;"
params:
- name: subsystem
type: string
description: "Requires RFTM plugged into port 7 powered by DCPM"
- id: set_port7_bus
label: Set port 7 to BUS mode
kind: action
command: "*{subsystem}B;"
params:
- name: subsystem
type: string
- id: report_position_query
label: Report position (r query)
kind: query
command: "*{subsystem}r{channel};"
params:
- name: subsystem
type: string
- name: channel
type: string
description: "Returns *nnRpp; with pp = percent away from reference (0=reference, 99=opposite limit)"
Feedbacks
- id: power_up_banner
type: string
description: "On power-up MC1 sends 'version, X-on'"
response: "version, X-on"
- id: position_report
type: string
description: "Position percent away from reference"
response_template: "*{nn}R{pp};"
notes: "nn = main channel, pp = percent (0=reference, 99=opposite limit, ±2% error)"
- id: position_uncalibrated
type: string
response: "*{nn}RN;"
description: "N = position unknown because not yet calibrated"
- id: position_unknown
type: string
response: "*{nn}RU;"
description: "U = position unknown"
- id: command_ack_good
type: string
response: "G;"
description: "Command formatted correctly (not 'r' or 's')"
- id: command_ack_malformed
type: string
response: "U;"
description: "Command not formatted correctly"
- id: command_ack_uncalibrated
type: string
response: "X;"
description: "'m' command cannot be executed (uncalibrated)"
- id: version_response
type: string
response: "2.0;"
description: "Reply to V query. Source also mentions 3.0 followed by R (Radio) or B (BUS) and CR"
- id: buffer_overflow
type: string
response: "O then X-on"
description: "Buffer (120 bytes) overflowed and all data purged"
- id: flow_control_xoff
type: string
response: "X-off (Ctrl-S, 0x13)"
description: "Buffer half full - sender should pause"
- id: flow_control_xon
type: string
response: "X-on (Ctrl-Q, 0x11)"
description: "Buffer empty - sender may resume (only if X-off was previously sent)"
Variables
# UNRESOLVED: load-sense thresholds (C18 min load, C19 stall) and specific-stop channel (C22)
# are documented but appear to be IR/button-sequence programming commands rather than RS-232
# serial commands. Source does not show *-framed serial equivalents.
Events
- id: powered_up
description: "Unsolicited 'version, X-on' on power-up"
payload: "version, X-on"
Macros
- id: calibrate_motor
label: Calibrate motor (full travel sweep)
description: "Drives motor to lower limit, then upper limit, then back to lower limit"
sequence:
- "*p01;"
- "*c10;"
- "*o10;"
- id: factory_default_reset
label: Reset everything to factory default
description: "Source: 'A button cannot be held, so to reset everything to factory default send the following sequence'"
sequence:
- "*p00;"
- "*c00;"
- "*c01;"
- "*o01;"
- "*s;"
Safety
confirmation_required_for: []
interlocks:
- id: ir_serial_conflict
description: "When an IR command is being sent, serial commands may be lost; when a serial command is received, an IR command may be lost. Do not drive IR and serial concurrently."
# UNRESOLVED: no electrical, voltage, or interlock safety values stated in source beyond IR/serial mutual exclusion
Notes
- Total message length 2–10 chars, typically 6.
- Case-insensitive opcodes (
o==O). - Terminator may be
;(0x3B) or CR (0x0D); LF (0x0A) ignored. - Header
*(0x2A) required; chars before*ignored but count toward buffer fill. - Buffer is 120 bytes; X-off at half full, X-on when empty (only if X-off previously sent).
- Inter-command gap 0.5 s when multiple buffered (0.1 s after a stop).
- Max timed pulse 50 sec; time field in 1/20-second units, 000 = forever (use
qto stop). - Position reported during motion reflects position at moment end-of-command received, may differ moments later. Position percentage has up to ±2% error.
- Subsystem
00= ALL systems (excludes radio channels). Channel00= ALL, channel60= "cut strap ALL". - Multiple MC1 receivers may share one RS-232 link if two-way mode unused (subsystem addressing).
- Source references an "m" (move?) command in error responses but does not document its syntax.
- Version "3.0" report appends R (Radio) or B (BUS) plus CR; "2.0" stated as a sample V response.
Provenance
source_domains:
- draperinc.com
source_urls:
- "https://www.draperinc.com/documentdownload.aspx?path=ProjectionScreens/Instructions&file=SerialComm-RS232_Inst.pdf"
retrieved_at: 2026-05-14T23:03:23.630Z
last_checked_at: 2026-06-02T21:41:36.378Z
Verification Summary
verdict: verified
checked_at: 2026-06-02T21:41:36.378Z
matched_actions: 10
action_count: 10
confidence: medium
summary: "All 10 spec actions matched to source protocol; all transport parameters verified verbatim. (7 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "TCP/IP or other transports — source documents only RS-232"
- "load-sensing (C18/C19) and specific-stop (C22) appear to be IR/button programming sequences, not serial commands; omitted from Actions"
- "load-sense thresholds (C18 min load, C19 stall) and specific-stop channel (C22)"
- "no electrical, voltage, or interlock safety values stated in source beyond IR/serial mutual exclusion"
- "m command syntax not stated"
- "exact electrical/serial pinout, cable type, connector spec not in refined excerpt"
- "relationship between LS101 product name and MC1 controller — source covers MC1; LS101 likely uses MC1 internally"
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0