class UVC::UVCDevice
Constants
- KNOWN_CONTROLS
mapping size: 1 | unsigned number => C size: 1 | signed number => c size: 2 | unsigned number => v size: 2 | signed number => s< size: 4 | unsigned number => V size: 4 | signed number => l<
Attributes
descriptors[R]
Public Class Methods
devices()
click to toggle source
# File lib/uvc.rb, line 653 def self.devices libusb.devices(bClass: 0xef, bSubClass: 0x02, bProtocol: 1) end
libusb()
click to toggle source
# File lib/uvc.rb, line 649 def self.libusb @@libusb ||= LIBUSB::Context.new end
new(setting)
click to toggle source
# File lib/uvc.rb, line 667 def initialize(setting) @setting = setting @descriptors = ClassSpecificVCInterfaceDescriptor.parse_array(setting.extra) end
video_control_interface_settings_of(device)
click to toggle source
# File lib/uvc.rb, line 657 def self.video_control_interface_settings_of(device) video_control_interface_settings = device.interfaces.flat_map {|interface| interface.alt_settings.select {|setting| setting.bInterfaceClass == CC_VIDEO && setting.bInterfaceSubClass == SC_VIDEOCONTROL } } end
Public Instance Methods
camera_terminals()
click to toggle source
# File lib/uvc.rb, line 672 def camera_terminals @descriptors.select {|i| i.kind_of? CameraTerminalDescriptor } end
close()
click to toggle source
# File lib/uvc.rb, line 710 def close handle = @handle @handle = nil handle.close end
error_code()
click to toggle source
# File lib/uvc.rb, line 741 def error_code bRequestErrorCode = @handle.control_transfer( bmRequestType: 0b10100001, bRequest: GET_CUR, wValue: (VC_REQUEST_ERROR_CODE_CONTROL << 8) | 0x00, wIndex: @setting.bInterfaceNumber, dataIn: 1 ).unpack("C")[0] end
extension_units()
click to toggle source
# File lib/uvc.rb, line 684 def extension_units @descriptors.select {|i| i.kind_of? ExtensionUnitDescriptor } end
get_info(control_selector, entityID)
click to toggle source
# File lib/uvc.rb, line 1056 def get_info(control_selector, entityID) Info.new(get_request(GET_INFO, control_selector, entityID, 1).unpack("B8")[0]) end
get_len(control_selector, entityID)
click to toggle source
# File lib/uvc.rb, line 1060 def get_len(control_selector, entityID) get_request(GET_LEN, control_selector, entityID, 1).unpack("C")[0] end
get_request(bRequest, control_selector, entityID, length)
click to toggle source
# File lib/uvc.rb, line 729 def get_request(bRequest, control_selector, entityID, length) @handle.control_transfer( bmRequestType: 0b10100001, # video control interface bRequest: bRequest, wValue: (control_selector << 8) | 0x00, wIndex: (entityID << 8) | @setting.bInterfaceNumber, dataIn: length ) rescue LIBUSB::ERROR_PIPE => e raise UVCError.new(error_code) end
input_terminals()
click to toggle source
# File lib/uvc.rb, line 688 def input_terminals @descriptors.select {|u| u.kind_of? InputTerminalDescriptor } end
open() { |handle| ... }
click to toggle source
# File lib/uvc.rb, line 696 def open @handle = @setting.device.open if block_given? begin @handle.claim_interface(@setting.bInterfaceNumber) yield @handle ensure close end else @handle.claim_interface(@setting.bInterfaceNumber) end end
output_terminals()
click to toggle source
# File lib/uvc.rb, line 692 def output_terminals @descriptors.select {|u| u.kind_of? OutputTerminalDescriptor } end
processing_units()
click to toggle source
# File lib/uvc.rb, line 676 def processing_units @descriptors.select {|i| i.kind_of? ProcessingUnitDescriptor } end
selector_units()
click to toggle source
# File lib/uvc.rb, line 680 def selector_units @descriptors.select {|i| i.kind_of? SelectorUnitDescriptor } end
set_cur(control_selector, entityID, data)
click to toggle source
# File lib/uvc.rb, line 1076 def set_cur(control_selector, entityID, data) control = KNOWN_CONTROLS.find {|c| c[:selector] == control_selector } p [:set_cur, control] data = control[:encode].call(data) if control set_request(SET_CUR, UVC.const_get(control_selector), entityID, data) end
set_request(bRequest, control_selector, entityID, data)
click to toggle source
# File lib/uvc.rb, line 716 def set_request(bRequest, control_selector, entityID, data) warn "set_request: %#04x %#04x %d %p" % [bRequest, control_selector, entityID, data] @handle.control_transfer( bmRequestType: 0b00100001, # video control interface bRequest: bRequest, wValue: (control_selector << 8) | 0x00, wIndex: (entityID << 8) | @setting.bInterfaceNumber, dataOut: data ) rescue LIBUSB::ERROR_PIPE => e raise UVCError.new(error_code) end