Source code for pyvisa.resources.usb

# -*- 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()


[docs] @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()
[docs] 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]
[docs] 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, )
[docs] @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`. """