# DewesoftX

## class DewesoftX(dxd_name: str | None = None)[source]

Bases: [`DAQDriverBase`](https://dev.nominal.io/instro/ref/instruments/instro.daq.DAQDriverBase.md#instro.daq.DAQDriverBase "instro.daq.daq.DAQDriverBase")

Streams live sync and async channels from a running DewesoftX instance over DCOM.

Attributes

| [`ai_channels`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.ai_channels "instro.unstable.daq.drivers.dewesoftx.DewesoftX.ai_channels") | Frozen snapshot of configured AI channels, keyed by alias. |
| --- | --- |
| [`ai_hw_timing_config`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.ai_hw_timing_config "instro.unstable.daq.drivers.dewesoftx.DewesoftX.ai_hw_timing_config") |  |
| [`ao_channels`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.ao_channels "instro.unstable.daq.drivers.dewesoftx.DewesoftX.ao_channels") | Frozen snapshot of configured AO channels, keyed by alias. |
| [`ao_hw_timing_config`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.ao_hw_timing_config "instro.unstable.daq.drivers.dewesoftx.DewesoftX.ao_hw_timing_config") |  |
| [`channels`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.channels "instro.unstable.daq.drivers.dewesoftx.DewesoftX.channels") | Frozen snapshot of all configured AI/AO/DI/DO channels (excludes relays). |
| [`di_channels`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.di_channels "instro.unstable.daq.drivers.dewesoftx.DewesoftX.di_channels") | Frozen snapshot of configured DI channels, keyed by alias. |
| [`di_hw_timing_config`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.di_hw_timing_config "instro.unstable.daq.drivers.dewesoftx.DewesoftX.di_hw_timing_config") |  |
| [`do_channels`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.do_channels "instro.unstable.daq.drivers.dewesoftx.DewesoftX.do_channels") | Frozen snapshot of configured DO channels, keyed by alias. |
| [`do_hw_timing_config`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.do_hw_timing_config "instro.unstable.daq.drivers.dewesoftx.DewesoftX.do_hw_timing_config") |  |
| [`relay_channels`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.relay_channels "instro.unstable.daq.drivers.dewesoftx.DewesoftX.relay_channels") | Frozen snapshot of configured relay channels, keyed by alias. |
| [`points_in_buffer`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.points_in_buffer "instro.unstable.daq.drivers.dewesoftx.DewesoftX.points_in_buffer") |  |

Methods

| [`close`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.close "instro.unstable.daq.drivers.dewesoftx.DewesoftX.close") | Drop the COM references; the configured channels survive, and the next open() rebinds them. |
| --- | --- |
| [`close_relay`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.close_relay "instro.unstable.daq.drivers.dewesoftx.DewesoftX.close_relay") | Close the relay (connect the circuit). |
| [`configure_ai_channel`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.configure_ai_channel "instro.unstable.daq.drivers.dewesoftx.DewesoftX.configure_ai_channel") | Deprecated: implement `configure_ai_voltage_channel` instead. |
| [`configure_ai_current_channel`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.configure_ai_current_channel "instro.unstable.daq.drivers.dewesoftx.DewesoftX.configure_ai_current_channel") | Same binding as voltage: DewesoftX channels carry their own units, so the HAL type only labels the alias. |
| [`configure_ai_hw_timing`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.configure_ai_hw_timing "instro.unstable.daq.drivers.dewesoftx.DewesoftX.configure_ai_hw_timing") | Require the requested rate to be DewesoftX's own: InstroDAQ derives the batch size and buffer from it. |
| [`configure_ai_thermocouple_channel`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.configure_ai_thermocouple_channel "instro.unstable.daq.drivers.dewesoftx.DewesoftX.configure_ai_thermocouple_channel") | Same binding as voltage; tc_type and CJC settings are ignored because DewesoftX owns sensor setup. |
| [`configure_ai_voltage_channel`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.configure_ai_voltage_channel "instro.unstable.daq.drivers.dewesoftx.DewesoftX.configure_ai_voltage_channel") | Bind an existing DewesoftX channel by name; DewesoftX owns all channel setup. |
| [`configure_ao_channel`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.configure_ao_channel "instro.unstable.daq.drivers.dewesoftx.DewesoftX.configure_ao_channel") | Deprecated: implement `configure_ao_voltage_channel` instead. |
| [`configure_ao_current_channel`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.configure_ao_current_channel "instro.unstable.daq.drivers.dewesoftx.DewesoftX.configure_ao_current_channel") | Register an AO current channel. |
| [`configure_ao_voltage_channel`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.configure_ao_voltage_channel "instro.unstable.daq.drivers.dewesoftx.DewesoftX.configure_ao_voltage_channel") | Register an AO voltage channel. |
| [`configure_di_line_channel`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.configure_di_line_channel "instro.unstable.daq.drivers.dewesoftx.DewesoftX.configure_di_line_channel") | Parse, program, and register a DI line channel. |
| [`configure_di_port_channel`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.configure_di_port_channel "instro.unstable.daq.drivers.dewesoftx.DewesoftX.configure_di_port_channel") | Parse, program, and register a DI port channel. |
| [`configure_do_line_channel`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.configure_do_line_channel "instro.unstable.daq.drivers.dewesoftx.DewesoftX.configure_do_line_channel") | Parse, program, and register a DO line channel. |
| [`configure_do_port_channel`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.configure_do_port_channel "instro.unstable.daq.drivers.dewesoftx.DewesoftX.configure_do_port_channel") | Parse, program, and register a DO port channel. |
| [`define_relay_channel`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.define_relay_channel "instro.unstable.daq.drivers.dewesoftx.DewesoftX.define_relay_channel") | Build a `RelayChannel` for `physical_channel` (e.g. `"3101"` = slot 3 / channel 101). |
| [`fetch_analog`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.fetch_analog "instro.unstable.daq.drivers.dewesoftx.DewesoftX.fetch_analog") | Block until `samples_per_channel` new samples arrive on every sync channel, then drain. |
| [`get_actual_sample_rate`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.get_actual_sample_rate "instro.unstable.daq.drivers.dewesoftx.DewesoftX.get_actual_sample_rate") | The device's rate captured at configure time; None before configure_ai_sample_rate(). |
| [`open`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.open "instro.unstable.daq.drivers.dewesoftx.DewesoftX.open") | Attach to the running DewesoftX instance. |
| [`open_relay`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.open_relay "instro.unstable.daq.drivers.dewesoftx.DewesoftX.open_relay") | Open the relay (disconnect the circuit). |
| [`read_analog`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.read_analog "instro.unstable.daq.drivers.dewesoftx.DewesoftX.read_analog") | Drain every new sample from each bound channel. |
| [`read_digital_line`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.read_digital_line "instro.unstable.daq.drivers.dewesoftx.DewesoftX.read_digital_line") | Sample a single DI line. |
| [`read_digital_port`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.read_digital_port "instro.unstable.daq.drivers.dewesoftx.DewesoftX.read_digital_port") | Sample a multi-line DI port. |
| [`start`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.start "instro.unstable.daq.drivers.dewesoftx.DewesoftX.start") | Listen for a session an operator starts, or with `start_storing_session=True` start one here. |
| [`stop`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.stop "instro.unstable.daq.drivers.dewesoftx.DewesoftX.stop") | Leave the running session alone, or with `stop_storing_session=True` stop it. |
| [`write_analog_value`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.write_analog_value "instro.unstable.daq.drivers.dewesoftx.DewesoftX.write_analog_value") | Write `value` to AO `channel`. |
| [`write_digital_line`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.write_digital_line "instro.unstable.daq.drivers.dewesoftx.DewesoftX.write_digital_line") | Drive a single DO line. |
| [`write_digital_port`](https://dev.nominal.io/instro/ref/instruments/instro.unstable.daq.drivers.dewesoftx.DewesoftX.md#instro.unstable.daq.drivers.dewesoftx.DewesoftX.write_digital_port "instro.unstable.daq.drivers.dewesoftx.DewesoftX.write_digital_port") | Drive a multi-line DO port. |

### open() → None[source]

Attach to the running DewesoftX instance.

### close() → None[source]

Drop the COM references; the configured channels survive, and the next open() rebinds them.

### start(**kwargs) → None[source]

Listen for a session an operator starts, or with `start_storing_session=True` start one here.

### stop(**kwargs) → None[source]

Leave the running session alone, or with `stop_storing_session=True` stop it.

### configure_ai_voltage_channel( channel: AnalogVoltageChannel, ) → None[source]

Bind an existing DewesoftX channel by name; DewesoftX owns all channel setup.

### configure_ai_current_channel( channel: AnalogCurrentChannel, ) → None[source]

Same binding as voltage: DewesoftX channels carry their own units, so the HAL type only labels the alias.

### configure_ai_thermocouple_channel( channel: AnalogThermocoupleChannel, ) → None[source]

Same binding as voltage; tc_type and CJC settings are ignored because DewesoftX owns sensor setup.

### configure_ai_channel( channel: AnalogChannel, ) → None[source]

Deprecated: implement `configure_ai_voltage_channel` instead.

### configure_ai_hw_timing( hw_timing_config: HWTimingConfig, ) → None[source]

Require the requested rate to be DewesoftX’s own: InstroDAQ derives the batch size and buffer from it.

### get_actual_sample_rate() → float | None[source]

The device’s rate captured at configure time; None before configure_ai_sample_rate().

### read_analog() → DewesoftXData[source]

Drain every new sample from each bound channel.

### fetch_analog() → DewesoftXData[source]

Block until `samples_per_channel` new samples arrive on every sync channel, then drain.

### configure_di_line_channel( physical_channel: str, logic: Logic, logic_level: float | None = None, alias: str | None = None, ) → None[source]

Parse, program, and register a DI line channel.

### configure_do_line_channel( physical_channel: str, logic: Logic, logic_level: float | None = None, alias: str | None = None, ) → None[source]

Parse, program, and register a DO line channel.

### write_digital_line( channel: DigitalChannel, data: int, ) → None[source]

Drive a single DO line. `data` is 0 or 1 (active-low `channel.logic` is handled in the driver).

### read_digital_line( channel: DigitalChannel, ) → int[source]

Sample a single DI line. Returns 0 or 1 after applying `channel.logic`.

### write_digital_port( channel: DigitalChannel, data: int, ) → None[source]

Drive a multi-line DO port. `data` is an N-bit integer; bit `i` controls line `i`.

### read_digital_port( channel: DigitalChannel, ) → int[source]

Sample a multi-line DI port. Returns an N-bit integer; bit `i` reflects line `i`.

### property ai_channels: Mapping[str, AnalogChannel | AnalogVoltageChannel | AnalogCurrentChannel | AnalogThermocoupleChannel]

Frozen snapshot of configured AI channels, keyed by alias.

### property ai_hw_timing_config: HWTimingConfig | None

### property ao_channels: Mapping[str, AnalogChannel | AnalogVoltageChannel | AnalogCurrentChannel | AnalogThermocoupleChannel]

Frozen snapshot of configured AO channels, keyed by alias.

### property ao_hw_timing_config: HWTimingConfig | None

### property channels: tuple[DAQChannel, ...]

Frozen snapshot of all configured AI/AO/DI/DO channels (excludes relays).

### close_relay(channel: RelayChannel)

Close the relay (connect the circuit). Override if the driver supports relays.

### configure_ao_channel(channel: AnalogChannel)

Deprecated: implement `configure_ao_voltage_channel` instead.

### configure_ao_current_channel( channel: AnalogCurrentChannel, )

Register an AO current channel. Override if the driver supports analog current output.

### configure_ao_voltage_channel( channel: AnalogVoltageChannel, )

Register an AO voltage channel. Override if the driver supports analog voltage output.

### configure_di_port_channel( physical_channel: str, logic: Logic, port_width: DigitalPortWidth, logic_level: float | None = None, alias: str | None = None, )

Parse, program, and register a DI port channel. Override if the driver supports port-mode digital input.

### configure_do_port_channel( physical_channel: str, logic: Logic, port_width: DigitalPortWidth, logic_level: float | None = None, alias: str | None = None, )

Parse, program, and register a DO port channel. Override if the driver supports port-mode digital output.

### define_relay_channel( physical_channel: str, alias: str | None = None, ) → RelayChannel

Build a `RelayChannel` for `physical_channel` (e.g. `"3101"` = slot 3 / channel 101).

Default implementation suits the Keysight 34980A’s slot/channel
addressing; override if the driver needs different parsing. Overrides
must also record the resulting channel on `self._relay_channels`.

### property di_channels: Mapping[str, DigitalChannel]

Frozen snapshot of configured DI channels, keyed by alias.

### property di_hw_timing_config: HWTimingConfig | None

### property do_channels: Mapping[str, DigitalChannel]

Frozen snapshot of configured DO channels, keyed by alias.

### property do_hw_timing_config: HWTimingConfig | None

### open_relay(channel: RelayChannel)

Open the relay (disconnect the circuit). Override if the driver supports relays.

### property relay_channels: Mapping[str, RelayChannel]

Frozen snapshot of configured relay channels, keyed by alias.

### write_analog_value( channel: AnalogChannel | AnalogVoltageChannel | AnalogCurrentChannel | AnalogThermocoupleChannel, value: float, )

Write `value` to AO `channel`. Override if the driver supports analog output.

### points_in_buffer: int
