The mcintosh_ma12000 driver controls the McIntosh MA12000 hybrid integrated amplifier over its native RS232 protocol fronted by a serial-to-IP bridge. One GEM device represents the amplifier; there are no zones — the MA12000 is a single-zone unit.
Status
Power, volume (0-100), mute, input selection (1-17), Output 1 / Output 2 speaker switching, balance, per-input trim, EQ, mono, meter and tube lights, display brightness, headphone HXD crossfeed, and MM/MC phono trim are all wired. The amplifier pushes status updates automatically (status feedback is enabled by the amp on every power cycle), so most attribute changes appear without polling. A 60 s safety resync is included.
Prerequisites
- Serial-to-IP bridge (Brainboxes, Global Cache, etc.) wired to the MA12000 RS232 jack with a DB9-F to 3.5 mm TRS cable (e.g. SF Cable D935-06: Tip = TXD, Ring = RXD, Sleeve = GND).
- Bridge serial port set to 115200 8N1, no flow control (the amp also supports 57600 / 38400 / 19200 / 9600).
- Bridge running in raw TCP mode (not telnet), with a stable LAN IP (DHCP reservation or static).
Setup
- Cable the MA12000 RS232 jack to the bridge.
- Configure the bridge to expose the serial port as raw TCP at 115200 8N1.
- System → Devices: add a device with driver
mcintosh_ma12000. Set:
ip — LAN IP of the bridge
port — TCP port the bridge maps to that serial port
- Save and enable. On AC connect the amp emits its model, serial number, and firmware version banner — the driver captures these into the
model, serial_number, and firmware_version device attributes automatically.
Attributes
Device — required
| Attribute | Type | Description |
|---|
ip | string | LAN IP of the serial-to-IP bridge. |
port | int | TCP port on the bridge that mirrors the RS232 serial port. |
Device — optional
| Attribute | Type | Default | Description |
|---|
monitor_interval | int (ms) | 60000 | Safety resync cadence. The amp pushes updates on every change; this is a backstop. |
max_volume | int (0-100) | 60 | Hard cap applied to discrete volume commands. volume_up / volume_down are not clamped since they only step by 1%. Protects against accidental loud levels on this very high-output amp. |
Reflected device attributes
The driver mirrors the following onto the device as state changes:
| Attribute | Type | Source |
|---|
power_state | string | on / off |
volume | int | 0-100 |
mute | bool | |
input | int | 1-17 |
input_label | string | Resolved label (BAL1, UNBAL3, MM PHONO, etc.) |
output1, output2 | bool | Speaker output switching |
balance | int | -50…+50 (left negative, right positive) |
input_trim | int | -12…+12 (0.5 dB steps) |
eq | bool | |
mono | bool | |
meter_lights | bool | |
display_brightness | int | 1 (dimmest) … 4 (brightest) |
headphone_hxd | bool | Crossfeed; only effective with headphones plugged in |
headphone_state | string | unplugged / plugged / no_jack |
phono_resistance | int | 1=50Ω 2=100Ω 3=200Ω 4=400Ω 5=1000Ω (MC only) |
phono_capacitance | int | 1=50pF 2=100pF 3=150pF 4=200pF 5=250pF 6=300pF 7=350pF 8=400pF (MM only) |
status_feedback | bool | Whether the amp is pushing unsolicited status updates |
| Index | Input |
|---|
| 1-2 | BAL1, BAL2 |
| 3-8 | UNBAL1 … UNBAL6 |
| 9 | MM PHONO |
| 10 | MC PHONO |
| 11-12 | COAX1, COAX2 |
| 13-14 | OPTI1, OPTI2 |
| 15 | USB |
| 16 | MCT |
| 17 | HDMI (DA2 module only) |
Commands
| Command | Args | Notes |
|---|
power_on / power_off / get_power | — | |
volume | volume (0-100) | Absolute level. Clamped server-side to the max_volume attribute (default 60). |
volume_up / volume_down / get_volume | — | |
mute_on / mute_off / get_mute | — | |
output1_on / output1_off / output2_on / output2_off | — | Speaker A / B switching. |
input | input (1-17) | See input map. |
input_up / input_down / get_input | — | |
balance | balance (-50…+50) | |
balance_left / balance_right / get_balance | — | Step in single increments. |
input_trim | trim (-12…+12) | Per-input trim, persists per source. |
eq_on / eq_off / mono_on / mono_off | — | |
meter_lights_on / meter_lights_off / tube_lights_on / tube_lights_off | — | |
display_brightness | level (1-4) | |
headphone_hxd_on / headphone_hxd_off | — | Headphones must be plugged in. |
phono_resistance | index (1-5) | MC PHONO must be the active input. |
phono_capacitance | index (1-8) | MM PHONO must be the active input. |
trim_menu_close | — | Closes the front-panel trim menu (else it times out). |
status_feedback_on / status_feedback_off / query_all | — | |
Known quirks
:::warning Power-off rejects most commands
While the amp is in standby, every command except PWR returns (ERROR - Invalid Command). The driver only polls non-power state when power_state is on.
:::
- The amp turns its status feedback (
STA) on automatically at every power cycle, so unsolicited updates are the norm.
phono_resistance (TPR) only works while input is MC PHONO; phono_capacitance (TPC) only works while input is MM PHONO. They return an Invalid Input error otherwise.
- Power-on takes ~15 s; commands sent during warm-up are buffered and acted on after.
Troubleshooting
| Symptom | Check |
|---|
| Every command returns Invalid Command | Amp is in standby. Send power_on first. |
| No volume / input updates appear in GEM | Confirm the bridge is in raw TCP mode (not telnet) and the serial settings are 115200 8N1. |
| Phono resistance / capacitance command rejected | TPR requires MC PHONO selected; TPC requires MM PHONO selected. |
| Model / serial / firmware never populated | The banner is only emitted when the amp is power-cycled at the AC mains while the bridge is connected. Power-cycle the amp once after wiring. |