From e7db196a2952b808d944449a6bf45abcc795bf43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Ku=C5=BAma?= Date: Tue, 31 May 2011 19:25:18 +0200 Subject: [PATCH] implemented get/set methods --- lib/sane.rb | 55 +++++++++++++++++++++++++++++++++++++++++++++ lib/scanner/sane.rb | 5 ----- 2 files changed, 55 insertions(+), 5 deletions(-) delete mode 100644 lib/scanner/sane.rb diff --git a/lib/sane.rb b/lib/sane.rb index 07dd8e7..73c9c15 100644 --- a/lib/sane.rb +++ b/lib/sane.rb @@ -32,6 +32,61 @@ module Sane API.sane_close(device_handle) end + def get_option_descriptor(device_handle, option) + result = API.sane_get_option_descriptor(device_handle, option) + API::OptionDescriptor.new(result) + end + + def get_option(device_handle, option) + descriptor = get_option_descriptor(device_handle, option) + + case descriptor[:type] + when :string + value_pointer = FFI::MemoryPointer.new(:pointer) + when :bool, :int, :fixed + value_pointer = FFI::MemoryPointer.new(:int) + else + return nil + end + + check_status!(API.sane_control_option(device_handle, option, :get_value, value_pointer, FFI::Pointer::NULL)) + + case descriptor[:type] + when :string + value_pointer.read_string + when :bool + !value_pointer.read_int.zero? + when :int, :fixed + value_pointer.read_int + end + end + + def set_option(device_handle, option, value) + descriptor = get_option_descriptor(device_handle, option) + + case descriptor[:type] + when :string + value_pointer = FFI::MemoryPointer.from_string(value) + when :int, :fixed + value_pointer = FFI::MemoryPointer.new(:int).write_int(value) + when :bool + value_pointer = FFI::MemoryPointer.new(:int).write_int(value ? 1 : 0) + else + return nil + end + + check_status!(API.sane_control_option(device_handle, option, :set_value, value_pointer, FFI::Pointer::NULL)) + + case descriptor[:type] + when :string + value_pointer.read_string + when :bool + !value_pointer.read_int.zero? + when :int, :fixed + value_pointer.read_int + end + end + def check_status!(status) raise Error.new(API.sane_strstatus(status), status) if status != :good end diff --git a/lib/scanner/sane.rb b/lib/scanner/sane.rb deleted file mode 100644 index 941467e..0000000 --- a/lib/scanner/sane.rb +++ /dev/null @@ -1,5 +0,0 @@ -module Scanner - module Sane - - end -end