The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

USB::TMC - Perl interface to USB Test & Measurement (USBTMC) backend.

SYNOPSIS

use USB::TMC;

# Open usb connection to  Agilent 34410A digital multimeter
my $usbtmc = USB::TMC->new(
    vid => 0x0957,
    pid => 0x0607,
    serial => 'MY47000419', # only needed if vid/pid is ambiguous
);

$usbtmc->write(data => "*CLS\n");
$usbtmc->write(data => "VOLT:NPLC 10\n");

print $usbtmc->query(data => ":read?\n", length => 100);

my $capabilities = $usbtmc->get_capabilities();
my $support_term_char = $capabilities->{support_term_char};

DESCRIPTION

This module provides a user-space USBTMC driver.

Internally this module is based on USB::LibUSB.

Does not yet support the additional features of USBTMC-USB488. But those could easily be added if needed.

METHODS

Errors with USB transfers will result in a croak.

Use default timeout if timeout arg is not given.

new

my $usbtmc = USB::TMC->new(
    vid => $vid,
    pid => $pid,
    serial => $serial, # optional
    reset_device => 1, # default: do not reset device
    debug_mode => 1,   # print lots of debug messages
    libusb_log_level => LIBUSB_LOG_LEVEL_DEBUG, # Import LIBUSB_LOG_LEVEL_* constant from USB::LibUSB
    term_char => "\n", # Stop a read request if the term_char occurs in the
                       # byte stream. Default: do not use term char
    timeout => 10,     # timeout in seconds. default: 5
);

write

$usbtmc->write(data => $data, timeout => $timeout);

Do DEV_DEP_MSG_OUT transfer. So far this only supports USBTMC messages consisting of a single transfer.

read

my $data = $usbtmc->read(length => $read_length, timeout => $timeout);

Do REQUEST_DEV_DEP_MSG_IN and DEV_DEP_MSG_IN transfers.

clear

$usbtmc->clear(timeout => $timeout);

Do INITIATE_CLEAR / CHECK_CLEAR_STATUS split transaction. On success, send CLEAR_FEATURE request to clear the Bulk-OUT Halt.

get_capabilities

my $capabilites = $usbtmc->get_capabilities(timeout => $timeout);

Do GET_CAPABILITIES request.

The $capabilities hash contains the following keys:

bcdUSBTMC
listen_only
talk_only
accept_indicator_pulse
support_term_char

REPORTING BUGS

Please report bugs at https://github.com/lab-measurement/USB-TMC/issues.

CONTACT

Feel free to contact us at the #labmeasurement channel on Freenode IRC.

SEE ALSO

AUTHOR

Simon Reinhardt, <simon.reinhardt@stud.uni-regensburg.de>

COPYRIGHT AND LICENSE

Copyright (C) 2017 by Simon Reinhardt

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.24.0 or, at your option, any later version of Perl 5 you may have available.