147 lines
4.9 KiB
Python
147 lines
4.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""High level wrapper for USB resources.
|
|
|
|
This file is part of PyVISA.
|
|
|
|
:copyright: 2014-2022 by PyVISA Authors, see AUTHORS for more details.
|
|
:license: MIT, see LICENSE for more details.
|
|
|
|
"""
|
|
from .. import attributes, constants
|
|
from ..attributes import Attribute
|
|
from .messagebased import ControlRenMixin, MessageBasedResource
|
|
|
|
|
|
class USBCommon(MessageBasedResource):
|
|
"""Common class for USB resources."""
|
|
|
|
#: USB interface number used by the given session.
|
|
interface_number: Attribute[int] = attributes.AttrVI_ATTR_USB_INTFC_NUM()
|
|
|
|
#: USB serial number of this device.
|
|
serial_number: Attribute[str] = attributes.AttrVI_ATTR_USB_SERIAL_NUM()
|
|
|
|
#: USB protocol used by this USB interface.
|
|
usb_protocol: Attribute[int] = attributes.AttrVI_ATTR_USB_PROTOCOL()
|
|
|
|
#: Maximum size of data that will be stored by any given USB interrupt.
|
|
maximum_interrupt_size: Attribute[int] = attributes.AttrVI_ATTR_USB_MAX_INTR_SIZE()
|
|
|
|
#: Manufacturer name.
|
|
manufacturer_name: Attribute[str] = attributes.AttrVI_ATTR_MANF_NAME()
|
|
|
|
#: Manufacturer identification number of the device.
|
|
manufacturer_id: Attribute[int] = attributes.AttrVI_ATTR_MANF_ID()
|
|
|
|
#: Model name of the device.
|
|
model_name: Attribute[str] = attributes.AttrVI_ATTR_MODEL_NAME()
|
|
|
|
#: Model code for the device.
|
|
model_code: Attribute[int] = attributes.AttrVI_ATTR_MODEL_CODE()
|
|
|
|
|
|
@MessageBasedResource.register(constants.InterfaceType.usb, "INSTR")
|
|
class USBInstrument(ControlRenMixin, USBCommon):
|
|
"""USB INSTR resources USB::manufacturer ID::model code::serial number
|
|
|
|
More complex resource names can be specified with the following grammar:
|
|
USB[board]::manufacturer ID::model code::serial number[::USB interface number][::INSTR]
|
|
|
|
Do not instantiate directly, use
|
|
:meth:`pyvisa.highlevel.ResourceManager.open_resource`.
|
|
|
|
"""
|
|
|
|
#: Whether the device is 488.2 compliant.
|
|
is_4882_compliant: Attribute[bool] = attributes.AttrVI_ATTR_4882_COMPLIANT()
|
|
|
|
def control_in(
|
|
self,
|
|
request_type_bitmap_field: int,
|
|
request_id: int,
|
|
request_value: int,
|
|
index: int,
|
|
length: int = 0,
|
|
) -> bytes:
|
|
"""Performs a USB control pipe transfer from the device.
|
|
|
|
Parameters
|
|
----------
|
|
request_type_bitmap_field : int
|
|
bmRequestType parameter of the setup stage of a USB control transfer.
|
|
request_id : int
|
|
bRequest parameter of the setup stage of a USB control transfer.
|
|
request_value : int
|
|
wValue parameter of the setup stage of a USB control transfer.
|
|
index : int
|
|
wIndex parameter of the setup stage of a USB control transfer.
|
|
This is usually the index of the interface or endpoint.
|
|
length : int
|
|
wLength parameter of the setup stage of a USB control transfer.
|
|
This value also specifies the size of the data buffer to receive
|
|
the data from the optional data stage of the control transfer.
|
|
|
|
Returns
|
|
-------
|
|
bytes
|
|
The data buffer that receives the data from the optional data stage
|
|
of the control transfer.
|
|
|
|
"""
|
|
return self.visalib.usb_control_in(
|
|
self.session,
|
|
request_type_bitmap_field,
|
|
request_id,
|
|
request_value,
|
|
index,
|
|
length,
|
|
)[0]
|
|
|
|
def control_out(
|
|
self,
|
|
request_type_bitmap_field: int,
|
|
request_id: int,
|
|
request_value: int,
|
|
index: int,
|
|
data: bytes = b"",
|
|
):
|
|
"""Performs a USB control pipe transfer to the device.
|
|
|
|
Parameters
|
|
----------
|
|
request_type_bitmap_field : int
|
|
bmRequestType parameter of the setup stage of a USB control transfer.
|
|
request_id : int
|
|
bRequest parameter of the setup stage of a USB control transfer.
|
|
request_value : int
|
|
wValue parameter of the setup stage of a USB control transfer.
|
|
index : int
|
|
wIndex parameter of the setup stage of a USB control transfer.
|
|
This is usually the index of the interface or endpoint.
|
|
data : bytes
|
|
The data buffer that sends the data in the optional data stage of
|
|
the control transfer.
|
|
|
|
"""
|
|
return self.visalib.usb_control_out(
|
|
self.session,
|
|
request_type_bitmap_field,
|
|
request_id,
|
|
request_value,
|
|
index,
|
|
data,
|
|
)
|
|
|
|
|
|
@MessageBasedResource.register(constants.InterfaceType.usb, "RAW")
|
|
class USBRaw(USBCommon):
|
|
"""USB RAW resources: USB::manufacturer ID::model code::serial number::RAW
|
|
|
|
More complex resource names can be specified with the following grammar:
|
|
USB[board]::manufacturer ID::model code::serial number[::USB interface number]::RAW
|
|
|
|
Do not instantiate directly, use
|
|
:meth:`pyvisa.highlevel.ResourceManager.open_resource`.
|
|
|
|
"""
|