[][src]Crate pico_driver

Dynamic loading, unsafe and safe wrappers for Pico Technology oscilloscope drivers.

This is a sub crate that you probably don't want to use directly. Try the top level pico-sdk crate which exposes everything from here.

Each Pico Technology oscilloscope relies on a native driver for communication and this driver will vary depending on the device product range. Each of these drivers has an interface which differs by either a few function arguments or a vastly differing API. This crate caters for these through two code paths, one for the ps2000 driver and one for the the rest.

LoaderPS2000 dynamically loads the ps2000 driver and exposes the unsafe function calls and LoaderCommon does the same for every other supported driver.

DriverPS2000 and DriverCommon wrap the loaders and expose a safe, common API by implementing the PicoDriver trait. These can be constructed with a Resolution which tells the wrapper where to resolve the dynamic library from. The LoadDriverExt trait supplies a shortcut to load a driver directly from the Driver enum via try_load and try_load_with_resolution.

Examples

Using the raw safe bindings to open and configure the first available device:

use pico_common::{ChannelConfig, Driver, PicoChannel, PicoCoupling, PicoInfo, PicoRange};
use pico_driver::{LoadDriverExt, Resolution};

// Load the ps2000 driver library with the default resolution
let driver = Driver::PS2000.try_load()?;
// Load the ps4000a driver library from the applications root directory
let driver = Driver::PS4000A.try_load_with_resolution(&Resolution::AppRoot)?;

// Open the first device
let handle = driver.open_unit(None)?;
let variant = driver.get_unit_info(handle, PicoInfo::VARIANT_INFO)?;

let ch_config = ChannelConfig {
    enabled: true,
    coupling: PicoCoupling::DC,
    range: PicoRange::X1_PROBE_2V,
    offset: 0.0
};

driver.set_channel(handle, PicoChannel::A, &ch_config)?;

Structs

DependencyLoader

Loads driver dependencies into memory so drivers can be loaded from non-standard paths

DriverCommon

Wraps most Pico drivers so that they implement the PicoDriver trait

DriverPS2000

Wraps the ps2000 driver so that it implements the PicoDriver trait

LoaderCommon

Dynamically loads various Pico drivers

LoaderPS2000

Dynamically loads the ps2000 driver

Enums

DriverLoadError

Covers the various errors encountered when attempting to load drivers

Resolution

Instructs the loader where to load drivers from

Traits

LoadDriverExt

Shortcuts for loading drivers directly from the Driver enum.

PicoDriver

Common trait implemented for every driver

Functions

is_kernel_driver_installed

Type Definitions

ArcDriver