Add ioctl to retrieve USBTMC-USB488 capabilities
This is a convenience function to obtain an instrument's capabilities from its file descriptor without having to access sysfs from the user program. Signed-off-by: Dave Penkler <dpenkler@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
eb6b92ecc0
commit
29779d89fd
|
@ -102,6 +102,9 @@ struct usbtmc_device_data {
|
|||
u16 iin_wMaxPacketSize;
|
||||
atomic_t srq_asserted;
|
||||
|
||||
/* coalesced usb488_caps from usbtmc_dev_capabilities */
|
||||
__u8 usb488_caps;
|
||||
|
||||
u8 rigol_quirk;
|
||||
|
||||
/* attributes from the USB TMC spec for this device */
|
||||
|
@ -993,6 +996,7 @@ static int get_capabilities(struct usbtmc_device_data *data)
|
|||
data->capabilities.device_capabilities = buffer[5];
|
||||
data->capabilities.usb488_interface_capabilities = buffer[14];
|
||||
data->capabilities.usb488_device_capabilities = buffer[15];
|
||||
data->usb488_caps = (buffer[14] & 0x07) | ((buffer[15] & 0x0f) << 4);
|
||||
rv = 0;
|
||||
|
||||
err_out:
|
||||
|
@ -1168,6 +1172,14 @@ static long usbtmc_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
|||
retval = usbtmc_ioctl_abort_bulk_in(data);
|
||||
break;
|
||||
|
||||
case USBTMC488_IOCTL_GET_CAPS:
|
||||
retval = copy_to_user((void __user *)arg,
|
||||
&data->usb488_caps,
|
||||
sizeof(data->usb488_caps));
|
||||
if (retval)
|
||||
retval = -EFAULT;
|
||||
break;
|
||||
|
||||
case USBTMC488_IOCTL_READ_STB:
|
||||
retval = usbtmc488_ioctl_read_stb(data, (void __user *)arg);
|
||||
break;
|
||||
|
|
|
@ -2,12 +2,14 @@
|
|||
* Copyright (C) 2007 Stefan Kopp, Gechingen, Germany
|
||||
* Copyright (C) 2008 Novell, Inc.
|
||||
* Copyright (C) 2008 Greg Kroah-Hartman <gregkh@suse.de>
|
||||
* Copyright (C) 2015 Dave Penkler <dpenkler@gmail.com>
|
||||
*
|
||||
* This file holds USB constants defined by the USB Device Class
|
||||
* Definition for Test and Measurement devices published by the USB-IF.
|
||||
* and USB488 Subclass Definitions for Test and Measurement devices
|
||||
* published by the USB-IF.
|
||||
*
|
||||
* It also has the ioctl definitions for the usbtmc kernel driver that
|
||||
* userspace needs to know about.
|
||||
* It also has the ioctl and capability definitions for the
|
||||
* usbtmc kernel driver that userspace needs to know about.
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_USB_TMC_H
|
||||
|
@ -40,6 +42,19 @@
|
|||
#define USBTMC_IOCTL_ABORT_BULK_IN _IO(USBTMC_IOC_NR, 4)
|
||||
#define USBTMC_IOCTL_CLEAR_OUT_HALT _IO(USBTMC_IOC_NR, 6)
|
||||
#define USBTMC_IOCTL_CLEAR_IN_HALT _IO(USBTMC_IOC_NR, 7)
|
||||
#define USBTMC488_IOCTL_GET_CAPS _IOR(USBTMC_IOC_NR, 17, unsigned char)
|
||||
#define USBTMC488_IOCTL_READ_STB _IOR(USBTMC_IOC_NR, 18, unsigned char)
|
||||
|
||||
/* Driver encoded usb488 capabilities */
|
||||
#define USBTMC488_CAPABILITY_TRIGGER 1
|
||||
#define USBTMC488_CAPABILITY_SIMPLE 2
|
||||
#define USBTMC488_CAPABILITY_REN_CONTROL 2
|
||||
#define USBTMC488_CAPABILITY_GOTO_LOCAL 2
|
||||
#define USBTMC488_CAPABILITY_LOCAL_LOCKOUT 2
|
||||
#define USBTMC488_CAPABILITY_488_DOT_2 4
|
||||
#define USBTMC488_CAPABILITY_DT1 16
|
||||
#define USBTMC488_CAPABILITY_RL1 32
|
||||
#define USBTMC488_CAPABILITY_SR1 64
|
||||
#define USBTMC488_CAPABILITY_FULL_SCPI 128
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue