To support the Keysight 82357B USB-GPIB adapter for use with thw LinuxGpib Controller in this directory
you can install LinuxGpib on Linux with something like this, tested on Ubuntu 22.10
cd /working/directory
wget --content-disposition --no-check-certificate https://sourceforge.net/projects/linux-gpib/files/latest/download
tar xvfz linux-gpib-4.3.5.tar.gz
cd linux-gpib-4.3.5/
tar xvf linux-gpib-kernel-4.3.5.tar.gz
cd linux-gpib-kernel-4.3.5
make
sudo make install
sudo modprobe gpib_common
sudo modprobe agilent_82357a
cd ..
tar xvf linux-gpib-user-4.3.5.tar.gz
./configure
make
sudo make install
(configure /etc/gpib.conf, /etc/udev/rules.d/99-agilent_82357a.rules using examples below)
(plug in Keysight 82357B, lights will flash a bit, then show one green 'READY'.
lsusb should show: something like:
Bus 001 Device 007: ID 0957:0718 Agilent Technologies, Inc. 82357B ()
(ibtest should now work)
cd language/perl
perl Makefile.PL
make
sudo make install
(can now load LinuxGpib in perl and use the LinuxGpib.pm Controller)
See https://gist.github.com/turingbirds/6eb05c9267a6437183a9567700e8581a
for more guidance, especially for older kernels
/etc/gpib should look like:
/***********************************************************************
GPIB.CONF IEEE488 library config file
-------------------
copyright : (C) 2002 by Frank Mori Hess
(C) 1994 by C.Schroeter
email : fmhess@users.sourceforge.net
***************************************************************************/
/***************************************************************************
*
* Syntax:
*
* interface { ... } starts new interface board section
* device {...} device configuration
*
***************************************************************************/
/* This section configures the configurable driver characteristics
* for an interface board, such as board address, and interrupt level.
* minor = 0 configures /dev/gpib0, minor = 1 configures /dev/gpib1, etc.
*/
interface {
minor = 0 /* board index, minor = 0 uses /dev/gpib0, minor = 1 uses /dev/gpib1, etc. */
board_type = "agilent_82357a" /* type of interface board being used */
name = "violet" /* optional name, allows you to get a board descriptor using ibfind() */
pad = 0 /* primary address of interface */
sad = 0 /* secondary address of interface */
timeout = T3s /* timeout for commands */
eos = 0x0a /* EOS Byte, 0xa is newline and 0xd is carriage return */
set-reos = yes /* Terminate read if EOS */
set-bin = no /* Compare EOS 8-bit */
set-xeos = no /* Assert EOI whenever EOS byte is sent */
set-eot = yes /* Assert EOI with last byte on writes */
/* settings for boards that lack plug-n-play capability */
base = 0 /* Base io ADDRESS */
irq = 0 /* Interrupt request level */
dma = 0 /* DMA channel (zero disables) */
/* pci_bus and pci_slot can be used to distinguish two pci boards supported by the same driver */
/* pci_bus = 0 */
/* pci_slot = 7 */
master = yes /* interface board is system controller */
}
/* Now the device sections define the device characteristics for each device.
* These are only used if you want to open the device using ibfind() (instead
* of ibdev() )
*/
device {
minor = 0 /* minor number for interface board this device is connected to */
name = "sme03" /* device mnemonic */
pad = 28 /* The Primary Address */
sad = 0 /* Secondary Address */
eos = 0xa /* EOS Byte */
set-reos = no /* Terminate read if EOS */
set-bin = no /* Compare EOS 8-bit */
}
device {
minor = 0
name = "scope"
pad = 8
sad = 0
}
device {
minor = 0
name = "PFG5105"
pad = 4
sad = 0
}
To automatically install the firmware,
/etc/udev/rules.d/99-agilent_82357a.rules should look like
#82357a without firmware
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="0957", ATTR{idProduct}=="0007", ENV{DEVICE}="$devnode", RUN+="/usr/local/lib/udev/gpib_udev_fxloader"
#82357b without firmware
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="0957", ATTR{idProduct}=="0518", ENV{DEVICE}="$devnode", RUN+="/usr/local/lib/udev/gpib_udev_fxloader"
#automatically set the correct --board-type option
ACTION=="add|change", SUBSYSTEM=="usb", DRIVER=="agilent_82357a_gpib", ATTRS{serial}=="*", ENV{GPIB_CONFIG_OPTIONS}+="--board-type agilent_82357a", ENV{SERIAL}="$attr{serial}"
#82357a with firmware
ACTION=="add|change", SUBSYSTEM=="usb", DRIVER=="agilent_82357a_gpib", ATTRS{idVendor}=="0957", ATTRS{idProduct}=="0107", RUN+="/usr/local/lib/udev/gpib_udev_config"
#82357b with firmware
ACTION=="add|change", SUBSYSTEM=="usb", DRIVER=="agilent_82357a_gpib", ATTRS{idVendor}=="0957", ATTRS{idProduct}=="0718", RUN+="/usr/local/lib/udev/gpib_udev_config"
#this rule generates new "change" udev events for devices supported by the
#driver after the module is loaded.
#it is needed because if the driver is not already loaded when the hardware is plugged in,
#then the initial hardware "add" event will not be able to accomplish anything.
SUBSYSTEM=="module", ACTION=="add", DEVPATH=="/module/agilent_82357a", RUN+="/usr/local/lib/udev/gpib_udevadm_wrapper trigger --property-match DRIVER=agilent_82357a_gpib"