> ## Documentation Index
> Fetch the complete documentation index at: https://instro.nominal.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Driver Dependencies

> External vendor drivers and libraries required to use instro

`instro` depends on external software to be installed for various hardware interactions to be successful. These must be installed on your system before you can use the corresponding `instro` drivers.

<Note>
  **Understanding the distinction**: These vendor-installable drivers are **different from** the driver classes that an `Instrument` is composed with:

  * **Vendor-installable drivers**: External libraries/drivers developed by instrument vendors that must be installed to your system operating system. These are necessary to install, regardless of using `instro`, to interact with the vendor hardware on the system in any way/environment.
  * **`instro` driver classes**: The vendor/model-specific Python code that `Instrument` uses to interact with the external software drivers.
</Note>

## Overview

Before using `instro` with specific instrument types, you must install the corresponding vendor driver or library. The table below shows which vendor drivers are required for which `instro` instrument types:

| Vendor Driver                        | Required For                                             | Used By instro Drivers                |
| ------------------------------------ | -------------------------------------------------------- | ------------------------------------- |
| **VISA**                             | SCPI/VISA-based instruments (PSUs, ELoads, Keysight DAQ) | All VISA-based driver implementations |
| **NI-DAQmx**                         | National Instruments DAQ devices                         | `NIDAQDriver`                         |
| **LJM (LabJack Module)**             | LabJack T-Series devices                                 | `LabJackTSeriesDriver`                |
| **MCC Universal Library (`mcculw`)** | Measurement Computing DAQ devices                        | `MCCDriver`                           |
| **Total Phase USB Drivers**          | Total Phase Aardvark I2C/SPI Host Adapter                | `Aardvark`                            |

## VISA

VISA (Virtual Instrument Software Architecture) is used by `instro` for all SCPI/VISA based instrument connections. `instro` installs `pyvisa`, the `pyvisa-py` Python backend, and every backend library `pyvisa-py` can use, so TCP/IP (SOCKET, VXI-11, HiSLIP), USB-TMC, serial, and VICP resources work without a vendor VISA runtime. GPIB also uses `pyvisa-py`, but the hardware additionally needs a native GPIB driver (see below). PXI and VXI are the only interfaces a pure-Python backend cannot drive; those still require a vendor runtime.

* **pyvisa** (Python VISA library)
* **pyvisa-py** (default Python backend)
* **pyusb + libusb** (USB-TMC backend; libusb ships bundled via `libusb-package`)
* **pyserial** (ASRL/serial backend)
* **psutil, zeroconf, pyvicp** (TCPIP discovery, HiSLIP discovery, and VICP support)
* **gpib-ctypes + a native GPIB driver** (GPIB backend; the driver is vendor/OS specific)
* **Vendor VISA runtimes** (optional; required for PXI/VXI or vendor-specific transports)

### Installation

**Default Python backend:**

* Installed with `instro`: `pyvisa`, `pyvisa-py`, and the full set of `pyvisa-py` backend libraries (`pyusb`, bundled libusb via `libusb-package`, `pyserial`, `psutil`, `zeroconf`, `pyvicp`, and `gpib-ctypes`). TCP/IP, USB-TMC, serial, HiSLIP, and VICP resources work with no extra setup.

**GPIB:**

* `instro` installs the `gpib-ctypes` binding, but GPIB hardware also needs a native driver: NI-488.2 for NI GPIB interfaces, or linux-gpib on Linux. Install the driver your interface requires.

**Vendor VISA backend:**

* Download and install the runtime required by your instrument vendor (for PXI/VXI, or vendor-specific transports).

## NI-DAQmx

NI-DAQmx is the National Instruments driver for their DAQ devices. This driver must be installed before using National Instruments DAQ devices with `instro`.

### Used By

* **`InstroDAQ`**: National Instruments DAQ devices (via `NIDAQDriver`)

### Installation

1. Download and install NI-DAQmx from the [National Instruments website](https://www.ni.com/en/support/downloads/drivers/download.ni-daq-mx.html)
2. Verify installation by opening NI-MAX (Measurement & Automation Explorer) and confirming your device appears

### Alternative Installation (Python)

You can also install NI-DAQmx via the `nidaqmx` Python package's driver installer:

```bash theme={null}
python -m nidaqmx installdriver
```

## LJM (LabJack Module)

LJM is the LabJack Module library required to communicate with LabJack T-Series devices (T4, T7, T8).

### Used By

* **`InstroDAQ`**: LabJack T-Series devices (via `LabJackTSeriesDriver`)

### Installation

1. Download LJM from the [LabJack website](https://labjack.com/support/software/installers/ljm)
2. Install the LJM package for your operating system
3. The Python bindings (`labjack.ljm`) are typically included with the LJM installation

## MCC Universal Library (`mcculw`)

The MCC Universal Library is the Measurement Computing driver stack for their USB and Ethernet DAQ devices. It must be installed before using MCC devices with `instro`.

### Used By

* **`InstroDAQ`**: Measurement Computing DAQ devices (via `MCCDriver`)

### Installation

1. Download and install the MCC DAQ Software (includes InstaCal and the Universal Library) from the [Measurement Computing website](https://digilent.com/reference/software/instacal/start).
2. Open **InstaCal** and confirm your device appears in the board list. Note the device's unique ID. You pass this as the `device_id` argument to `MCCDriver()` when constructing the driver handed to `InstroDAQ`.
3. The Python bindings (`mcculw`) are installed automatically when you install the `instro[mccdaq]` or `instro[daq]` extras.

<Note>
  The MCC Universal Library is currently only available on Windows. MCC DAQ support in `instro` is therefore limited to Windows hosts.
</Note>

## Total Phase USB Drivers

Total Phase USB Drivers are required to communicate with Total Phase Aardvark I2C/SPI Host Adapter devices.

### Used By

* **`I2CInterface`**: Total Phase Aardvark I2C/SPI Host Adapter (via `Aardvark`)

### Installation

1. Download the USB Drivers from the [Total Phase website](https://www.totalphase.com/products/usb-drivers/)

***

## Adding New Drivers

As `instro` adds support for new instrument vendors, additional vendor-installable drivers may be required. This page will be updated to document any new dependencies. If you're developing a custom driver that requires a vendor-installable driver not documented here, please ensure your documentation clearly states this requirement.
