Summary
Linn Ikemi CD player controlled over RS-232 ASCII interface. Device is slave, replies only when addressed. All commands framed as $command(params)$ delimited by $ and terminated with CR LF (0D 0A), with optional #source_id# / &group_id& / @destination_id@ prefixes.
Transport
protocols:
- serial
serial:
baud_rate: 9600 # source §2.2.1: default 9600, options 2400/4800/9600/19200/38400
# UNRESOLVED: data_bits, parity, stop_bits, flow_control not stated in source
auth:
type: none # inferred: no auth procedure in source
Traits
# - queryable (inferred: ?, MODE, STATUS, TRACK ?, INDEX ?)
# - levelable omitted: no volume/level controls in source
Actions
# ---------------- System commands (§2) ----------------
- id: id_set
label: Set product identifier
kind: action
command: "$ID identifier$"
params:
- name: identifier
type: string
description: Product identifier, max 20 alphanumeric chars (no spaces)
- id: id_remove
label: Remove product identifier
kind: action
command: "$ID ~ identifier$"
params:
- name: identifier
type: string
- id: id_query
label: Query product identifier
kind: query
command: "$ID ?$"
params: []
- id: gid_set
label: Set group identifier
kind: action
command: "$GID identifier$"
params:
- name: identifier
type: string
- id: gid_remove
label: Remove product from group
kind: action
command: "$GID ~ identifier$"
params:
- name: identifier
type: string
- id: gid_query
label: Query group identifiers
kind: query
command: "$GID ?$"
params: []
- id: baud_set
label: Set baud rate
kind: action
command: "$BAUD baudrate$"
params:
- name: baudrate
type: integer
description: One of 2400, 4800, 9600, 19200, 38400
- id: baud_query
label: Query baud rate
kind: query
command: "$BAUD ?$"
params: []
- id: reset
label: Reset comms buffer
kind: action
command: "$RESET$"
params: []
- id: echo
label: Echo text
kind: action
command: "$ECHO text$"
params:
- name: text
type: string
- id: poll_start
label: Polling - start
kind: action
command: "$POLL START$"
params: []
- id: poll_id
label: Polling - read product id
kind: query
command: "$POLL ID$"
params: []
- id: poll_sleep
label: Polling - sleep product
kind: action
command: "@dest_1_id@$POLL SLEEP$"
params:
- name: dest_1_id
type: string
description: Destination identifier returned by prior POLL ID
- id: poll_done
label: Polling - end
kind: action
command: "$POLL DONE$"
params: []
- id: status
label: Return last command status
kind: query
command: "$STATUS$"
params: []
- id: power_up_message
label: Power-up message (front-panel PAUSE + power-on)
kind: action
command: "!$IKEMI$"
notes: "Unsolicited; product transmits this on power-up when activated by holding PAUSE during switch-on (§2.2.3.1)."
# ---------------- IKEMI transport commands (§3) ----------------
- id: play
label: Play
kind: action
command: "$PLAY$"
params: []
- id: pause
label: Pause
kind: action
command: "$PAUSE$"
params: []
- id: stop
label: Stop
kind: action
command: "$STOP$"
params: []
- id: mode_query
label: Query operational mode
kind: query
command: "$MODE$"
params: []
- id: track_query
label: Query current track number
kind: query
command: "$TRACK ?$"
params: []
- id: track_next
label: Track +1
kind: action
command: "$TRACK +$"
params: []
- id: track_prev
label: Track -1
kind: action
command: "$TRACK -$"
params: []
- id: track_select
label: Select track
kind: action
command: "$TRACK number$"
params:
- name: number
type: integer
- id: track_total
label: Query total tracks
kind: query
command: "$TRACK TOT$"
params: []
- id: index_query
label: Query current index number
kind: query
command: "$INDEX ?$"
params: []
- id: index_next
label: Index +1
kind: action
command: "$INDEX +$"
params: []
- id: index_prev
label: Index -1
kind: action
command: "$INDEX -$"
params: []
- id: index_select
label: Select index
kind: action
command: "$INDEX number$"
params:
- name: number
type: integer
- id: intro_query
label: Query intro status
kind: query
command: "$INTRO ?$"
params: []
- id: intro_on
label: Start intro play
kind: action
command: "$INTRO [ON|PLAY]$"
params:
- name: mode
type: enum
values: [ON, PLAY]
- id: intro_off
label: Stop intro play
kind: action
command: "$INTRO [OFF|STOP]$"
params:
- name: mode
type: enum
values: [OFF, STOP]
- id: search_back
label: Search backwards
kind: action
command: "$SEARCH <$"
params: []
- id: search_fwd
label: Search forwards
kind: action
command: "$SEARCH >$"
params: []
- id: search_stop
label: Stop search
kind: action
command: "$SEARCH STOP$"
params: []
- id: digital_query
label: Query digital audio output
kind: query
command: "$DIGITAL ?$"
params: []
- id: digital_on
label: Enable digital audio output
kind: action
command: "$DIGITAL [Y|ON]$"
params:
- name: mode
type: enum
values: [Y, ON]
- id: digital_off
label: Disable digital audio output
kind: action
command: "$DIGITAL [N|OFF]$"
params:
- name: mode
type: enum
values: [N, OFF]
- id: random_query
label: Query random status
kind: query
command: "$RANDOM ?$"
params: []
- id: random_on
label: Random on
kind: action
command: "$RANDOM [Y|ON]$"
params:
- name: mode
type: enum
values: [Y, ON]
- id: random_off
label: Random off
kind: action
command: "$RANDOM [N|OFF]$"
params:
- name: mode
type: enum
values: [N, OFF]
- id: shuffle_query
label: Query shuffle status
kind: query
command: "$SHUFFLE ?$"
params: []
- id: shuffle_on
label: Shuffle on
kind: action
command: "$SHUFFLE [Y|ON]$"
params:
- name: mode
type: enum
values: [Y, ON]
- id: shuffle_off
label: Shuffle off
kind: action
command: "$SHUFFLE [N|OFF]$"
params:
- name: mode
type: enum
values: [N, OFF]
- id: program_query
label: Query program status
kind: query
command: "$PROGRAM ?$"
params: []
- id: program_include
label: Program include tracks
kind: action
command: "$PROGRAM INCLUDE track [track [...]]$"
params:
- name: track
type: integer
- id: program_exclude
label: Program exclude tracks
kind: action
command: "$PROGRAM EXCLUDE track [track [...]]$"
params:
- name: track
type: integer
- id: program_clear
label: Clear program
kind: action
command: "$PROGRAM CLEAR$"
params: []
- id: repeat_query
label: Query repeat status
kind: query
command: "$REPEAT ?$"
params: []
- id: repeat_on
label: Repeat on
kind: action
command: "$REPEAT [Y|ON]$"
params:
- name: mode
type: enum
values: [Y, ON]
- id: repeat_off
label: Repeat off
kind: action
command: "$REPEAT [N|OFF]$"
params:
- name: mode
type: enum
values: [N, OFF]
- id: repeat_beg
label: Mark repeat start
kind: action
command: "$REPEAT BEG$"
params: []
- id: repeat_end
label: Mark repeat end
kind: action
command: "$REPEAT END$"
params: []
- id: ir_on
label: Enable IR control
kind: action
command: "$IR [Y|ON]$"
params:
- name: mode
type: enum
values: [Y, ON]
- id: ir_off
label: Disable IR control
kind: action
command: "$IR [N|OFF]$"
params:
- name: mode
type: enum
values: [N, OFF]
- id: ir_query
label: Query IR control status
kind: query
command: "$IR ?$"
params: []
Feedbacks
- id: mode_state
type: enum
values: [PLAYING, PAUSED, STOPPED, NODISC]
description: Returned by $MODE$ (§3.3.4)
- id: track_number
type: integer
description: Returned by $TRACK ?$, $TRACK +/-, $TRACK number$
- id: track_total
type: integer
description: Returned by $TRACK TOT$
- id: index_number
type: integer
description: Returned by $INDEX$ commands
- id: intro_state
type: enum
values: [PLAY, STOP, NODISC]
- id: digital_state
type: enum
values: [ON, OFF]
- id: random_state
type: enum
values: [ON, OFF, NODISC]
- id: shuffle_state
type: enum
values: [ON, OFF, NODISC]
- id: repeat_state
type: enum
values: [ON, OFF]
- id: ir_state
type: enum
values: [ON, OFF]
- id: status_code
type: integer
description: Numeric code returned by $STATUS$ (§2.4.1.1 + Appendix B)
- id: fail_response
type: string
description: $FAIL n$ on invalid command or task failure
Variables
- id: baud_rate
type: integer
values: [2400, 4800, 9600, 19200, 38400]
description: Set via $BAUD baudrate$ (§2.2.1); defaults to 9600
- id: product_identifier
type: string
description: Set via $ID identifier$ (§2.1.1); max 20 alphanumeric chars
- id: group_identifiers
type: array
description: Up to 5 group memberships per product (§2.1.2)
Events
- id: power_up_message
payload: "!$IKEMI$"
description: "Unsolicited message on power-up when activated by holding PAUSE + switching on (§2.2.3.1)"
Macros
# Source describes a polling discovery algorithm (§2.3.2):
# POLL START → POLL ID → @dest_1@ POLL SLEEP → POLL ID → @dest_2@ POLL SLEEP ...
# → POLL ID (timeout) → POLL DONE
# Each step is a separate action above; no composite macro defined in source.
Safety
confirmation_required_for: []
interlocks: []
# UNRESOLVED: source contains no safety warnings, interlocks, or power-on sequencing requirements.
Notes
RS-232 ASCII framing: $cmd(params)$NL where NL = 0x0D 0x0A. Identifiers optional and prefixed: #source_id# / &group_id& / @destination_id@. Two-stage reply: initial ! (or !$FAIL n$ on parse error) within 10 ms, then final !$Status_String$ on task completion. Host must not issue further commands until final response received. Group-mode products do not acknowledge (§2.1.2). Default baud 9600; set via $BAUD$ — note that the initial response uses the OLD baud and the final response uses the NEW baud. Power-up message !$IKEMI$ enabled by holding PAUSE during switch-on. Identifiers may not contain spaces or the delimiter characters #, &, @, $. Fields cannot be nested.
Provenance
source_domains:
- docs.linn.co.uk
source_urls:
- https://docs.linn.co.uk/wiki/images/b/b6/Ikemi_rs232_commands.PDF
retrieved_at: 2026-04-30T04:32:36.626Z
last_checked_at: 2026-06-02T17:23:14.319Z
Verification Summary
verdict: verified
checked_at: 2026-06-02T17:23:14.319Z
matched_actions: 56
action_count: 56
confidence: medium
summary: "All 56 spec actions matched literally with source commands; baud rate and transport parameters verified; complete coverage of source command set. (4 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "data_bits, parity, stop_bits, flow_control not stated in source; default behaviour assumed but not documented"
- "data_bits, parity, stop_bits, flow_control not stated in source"
- "source contains no safety warnings, interlocks, or power-on sequencing requirements."
- "data_bits / parity / stop_bits / flow_control not stated; firmware version not stated; no documented safety interlocks."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0