40 lines
1.0 KiB
Ruby
40 lines
1.0 KiB
Ruby
module Sane
|
|
class << self
|
|
def init
|
|
version_code = FFI::MemoryPointer.new(:int)
|
|
check_status!(API.sane_init(version_code, FFI::Pointer::NULL))
|
|
version_code.read_int
|
|
end
|
|
|
|
def exit
|
|
API.sane_exit
|
|
end
|
|
|
|
def get_devices
|
|
devices_pointer = FFI::MemoryPointer.new(:pointer)
|
|
check_status!(API.sane_get_devices(devices_pointer, 0))
|
|
devices = devices_pointer.read_pointer
|
|
[].tap do |result|
|
|
until devices.read_pointer.null?
|
|
result << API::Device.new(devices.read_pointer)
|
|
devices += FFI.type_size(:pointer)
|
|
end
|
|
end
|
|
end
|
|
|
|
def open(device_name)
|
|
device_handle_pointer = FFI::MemoryPointer.new(:pointer)
|
|
check_status!(API.sane_open(device_name.to_s, device_handle_pointer))
|
|
device_handle_pointer.read_pointer
|
|
end
|
|
|
|
def close(device_handle)
|
|
API.sane_close(device_handle)
|
|
end
|
|
|
|
def check_status!(status)
|
|
raise Error.new(API.sane_strstatus(status), status) if status != :good
|
|
end
|
|
end
|
|
end
|