ffi-gphoto2 0.5.1 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +11 -0
  3. data/CHANGELOG.md +44 -0
  4. data/README.md +22 -12
  5. data/examples/autofocus.rb +21 -0
  6. data/examples/capture.rb +8 -0
  7. data/examples/continuous_burst.rb +27 -0
  8. data/examples/list_config.rb +1 -0
  9. data/examples/list_files.rb +52 -0
  10. data/ffi-gphoto2.gemspec +9 -8
  11. data/lib/ffi/gphoto2.rb +14 -4
  12. data/lib/ffi/gphoto2/camera_abilities_list.rb +1 -1
  13. data/lib/ffi/gphoto2/camera_file_info.rb +10 -0
  14. data/lib/ffi/gphoto2/camera_file_info_audio.rb +11 -0
  15. data/lib/ffi/gphoto2/camera_file_info_fields.rb +14 -0
  16. data/lib/ffi/gphoto2/camera_file_info_file.rb +15 -0
  17. data/lib/ffi/gphoto2/camera_file_info_preview.rb +13 -0
  18. data/lib/ffi/gphoto2/camera_file_permissions.rb +9 -0
  19. data/lib/ffi/gphoto2/camera_file_status.rb +7 -0
  20. data/lib/ffi/gphoto2/camera_list.rb +1 -1
  21. data/lib/ffi/gphoto2/camera_widget.rb +1 -1
  22. data/lib/ffi/gphoto2_port.rb +21 -1
  23. data/lib/ffi/gphoto2_port/gp_port.rb +17 -0
  24. data/lib/ffi/gphoto2_port/gp_port_info_list.rb +1 -1
  25. data/lib/ffi/gphoto2_port/gp_port_serial_parity.rb +6 -0
  26. data/lib/ffi/gphoto2_port/gp_port_settings.rb +11 -0
  27. data/lib/ffi/gphoto2_port/gp_port_settings_serial.rb +12 -0
  28. data/lib/ffi/gphoto2_port/gp_port_settings_usb.rb +15 -0
  29. data/lib/ffi/gphoto2_port/gp_port_settings_usb_disk_direct.rb +8 -0
  30. data/lib/ffi/gphoto2_port/gp_port_settings_usb_scsi.rb +8 -0
  31. data/lib/gphoto2.rb +24 -4
  32. data/lib/gphoto2/camera.rb +10 -2
  33. data/lib/gphoto2/camera/capture.rb +22 -0
  34. data/lib/gphoto2/camera/configuration.rb +2 -1
  35. data/lib/gphoto2/camera/event.rb +3 -6
  36. data/lib/gphoto2/camera_abilities.rb +9 -0
  37. data/lib/gphoto2/camera_abilities_list.rb +1 -1
  38. data/lib/gphoto2/camera_file.rb +26 -8
  39. data/lib/gphoto2/camera_file_info/camera_file_info.rb +52 -0
  40. data/lib/gphoto2/camera_file_info/file_camera_file_info.rb +30 -0
  41. data/lib/gphoto2/camera_list.rb +1 -1
  42. data/lib/gphoto2/camera_widgets/camera_widget.rb +3 -7
  43. data/lib/gphoto2/camera_widgets/radio_camera_widget.rb +0 -4
  44. data/lib/gphoto2/camera_widgets/text_camera_widget.rb +1 -3
  45. data/lib/gphoto2/entry.rb +0 -4
  46. data/lib/gphoto2/port.rb +61 -0
  47. data/lib/gphoto2/port_info.rb +0 -4
  48. data/lib/gphoto2/port_info_list.rb +1 -1
  49. data/lib/gphoto2/version.rb +1 -1
  50. data/spec/gphoto2/camera_abilities_spec.rb +23 -0
  51. data/spec/gphoto2/camera_file_info/file_camera_file_info_spec.rb +56 -0
  52. data/spec/gphoto2/camera_file_spec.rb +17 -0
  53. data/spec/gphoto2/camera_spec.rb +11 -5
  54. data/spec/gphoto2/port_spec.rb +22 -0
  55. data/spec/gphoto2_spec.rb +18 -0
  56. data/spec/support/shared_examples/camera/capture_examples.rb +13 -0
  57. data/spec/support/shared_examples/camera/configuration_examples.rb +26 -18
  58. data/spec/support/shared_examples/camera_file_info_examples.rb +42 -0
  59. metadata +54 -24
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 83f9c14b8b7006440420e875c32d4a93b809ce28
4
- data.tar.gz: 9e3ccef87bc4565c88c4750e64d09ccde23f3330
2
+ SHA256:
3
+ metadata.gz: 705f84af5e6252107a78d9f76cefe51f3d1f9933c6e48b07ce21b7d507db2841
4
+ data.tar.gz: 3691c97cfc7551b30d3d4aff35cb7c33b5c09d28d81bb073a86210923814fa32
5
5
  SHA512:
6
- metadata.gz: 9d90104862dfccd44685aefa3870d83cde93e23a0aab57df6a7eb5a7feb2d9e712ca8c3125260b36f18b090df6ea8fce60726e913b667617f551180058c12397
7
- data.tar.gz: f8536cef9cf2d3d7c9cfedb71fa0e7079280a7a7a0e7f579e1b886c4cba8e37e9316504e2298f1aabc0358638a3cd7f0ef5d20e5c87eee95ea4e15d82acef454
6
+ metadata.gz: 792e487489753ac550cdbe27330c67aa2b522263ed8632a18fbfa44076e0dddadc44c201ef8c9cfdd1524c2338705760b11d576856d2fd4d266f9f02606a2f32
7
+ data.tar.gz: 276768da7221b07894b389081af32849cb36b926df2e2961a41381391a6fc4311df4d0842b0a4045e56ad7defff4c8366a551e7b65d95d3f9b1567e62780994a
@@ -0,0 +1,11 @@
1
+ sudo: required
2
+ dist: trusty
3
+ language: ruby
4
+ rvm:
5
+ - 2.3.1
6
+ before_install:
7
+ - gem install bundler -v 1.12.5
8
+ - sudo apt-get -qq update
9
+ - sudo apt-get install libgphoto2-6 libgphoto2-port10
10
+ - sudo ln -s /usr/lib/x86_64-linux-gnu/libgphoto2.so{.6,}
11
+ - sudo ln -s /usr/lib/x86_64-linux-gnu/libgphoto2_port.so{.10,}
@@ -0,0 +1,44 @@
1
+ # Changelog
2
+
3
+ ## HEAD
4
+
5
+ ## 0.8.0 (2020-06-29)
6
+
7
+ * [FIX] Fix deprecation warning (`warning: rb_safe_level will be removed in
8
+ Ruby 3.0`) by updating to ffi 1.12.0.
9
+ * [CHANGE] Raise minimum Ruby version to 2.0.0, which comes from the dependency
10
+ on ffi 1.12.0 (specifically 1.11.1).
11
+
12
+ ## 0.7.1 (2017-01-02)
13
+
14
+ * [FIX] Load `ffi` before any usage of the bindings.
15
+
16
+ ## 0.7.0 (2016-09-19)
17
+
18
+ * [CHANGE] Raise minimum `libgphoto2` version to 2.5.2. This version introduced
19
+ `gp_port_reset`.
20
+ * [ADD] Add `FFI::GPhoto2Port::GPPort` struct and related functions to do a
21
+ port reset.
22
+
23
+ ## 0.6.1 (2016-08-21)
24
+
25
+ * [FIX] `ManagedStruct.release` actually calls `*_free` functions. Autorelease
26
+ invocations were silently failing with a `TypeError` because the functions
27
+ expected structs, not pointers.
28
+
29
+ ## 0.6.0 (2016-07-11)
30
+
31
+ * [FIX] Use the correct default filename when a `CameraFile` is a preview.
32
+ * [ADD] Add `CameraFileInfo` and related operations. `CameraFile#info` only
33
+ supports files.
34
+ * [FIX] `CameraWidget#label` calls the correct widget label function.
35
+ * [FIX] `Camera#[]=` raises an `ArgumentError` when passed an invalid key
36
+ instead of failing on `nil`.
37
+ * [ADD] Add `CameraAbilities#operations` to always return an `Integer`.
38
+ libgphoto2 does not stay in the defined enum set of `CameraOperations`;
39
+ therefore, it is treated as an integer bit field instead.
40
+ * [CHANGE] Errors are thrown as `GPhoto2::Error` rather than `RuntimeError`.
41
+ Use `#message` and `#code` to extract the the GPhoto2 error message and
42
+ return code, respectively.
43
+ * [ADD] `Camera#trigger` for trigger capture.
44
+ * [FIX] `TextCameraWidget` values can by any object that implements `#to_s`.
data/README.md CHANGED
@@ -1,6 +1,10 @@
1
1
  # ffi-gphoto2
2
2
 
3
- **ffi-gphoto2** provides an FFI for common functions in [libgphoto2][1].
3
+
4
+ [![Gem Version](https://badge.fury.io/rb/ffi-gphoto2.svg)](https://badge.fury.io/rb/ffi-gphoto2)
5
+ [![Build Status](https://travis-ci.org/zaeleus/ffi-gphoto2.svg?branch=master)](https://travis-ci.org/zaeleus/ffi-gphoto2)
6
+
7
+ **ffi-gphoto2** provides an FFI for common functions in [libgphoto2][gphoto].
4
8
  It also includes a facade to interact with the library in a more
5
9
  idiomatic Ruby way.
6
10
 
@@ -8,8 +12,9 @@ idiomatic Ruby way.
8
12
 
9
13
  ### Prerequisites
10
14
 
11
- * Ruby >= 1.9
12
- * libgphoto2 >= 2.5.0
15
+ * Ruby >= 2.0
16
+ * libgphoto2 >= 2.5.2
17
+ * libgphoto2_port >= 0.10.1
13
18
 
14
19
  ### Gem
15
20
 
@@ -34,9 +39,17 @@ camera = cameras.first
34
39
  # ...or more conveniently
35
40
  camera = GPhoto2::Camera.first
36
41
 
37
- # ...or even search by model name
42
+ # search by model name
38
43
  camera = GPhoto2::Camera.where(model: /nikon/i).first
39
44
 
45
+ # the above examples require the camera be manually closed when done
46
+ camera.close
47
+
48
+ # pass a block to automatically close the camera
49
+ GPhoto2::Camera.first do |camera|
50
+ # ...
51
+ end
52
+
40
53
  # check camera abilities (see `FFI::GPhoto2::CameraOperation.symbols`)
41
54
  camera.can? :capture_image
42
55
  # => true
@@ -97,14 +110,11 @@ file.save
97
110
 
98
111
  # ...and then delete it from the camera
99
112
  file.delete
100
-
101
- # close the camera
102
- camera.finalize
103
113
  ```
104
114
 
105
- More examples can be found in [`examples/`][2]. YARD documentation can be
106
- generated using the `rake yard` task or [browsed online][3].
115
+ More examples can be found in [`examples/`][examples]. YARD documentation can be
116
+ generated using the `rake yard` task or [browsed online][rubydoc].
107
117
 
108
- [1]: http://www.gphoto.org/
109
- [2]: https://github.com/zaeleus/ffi-gphoto2/tree/master/examples
110
- [3]: http://www.rubydoc.info/gems/ffi-gphoto2/frames
118
+ [gphoto]: http://www.gphoto.org/
119
+ [examples]: https://github.com/zaeleus/ffi-gphoto2/tree/master/examples
120
+ [rubydoc]: http://www.rubydoc.info/gems/ffi-gphoto2/frames
@@ -0,0 +1,21 @@
1
+ require 'gphoto2'
2
+
3
+ # Capture an image only after successfully autofocusing.
4
+ #
5
+ # Typically, if the camera fails to autofocus, updating the `autofocusdrive`
6
+ # key will throw an "Unspecified error (-1)". This catches the exception and
7
+ # continues to autofocus until it is successful.
8
+
9
+ GPhoto2::Camera.first do |camera|
10
+ begin
11
+ camera.update(autofocusdrive: true)
12
+ rescue GPhoto2::Error
13
+ puts "autofocus failed... retrying"
14
+ camera.reload
15
+ retry
16
+ ensure
17
+ camera.update(autofocusdrive: false)
18
+ end
19
+
20
+ camera.capture
21
+ end
@@ -0,0 +1,8 @@
1
+ require 'gphoto2'
2
+
3
+ # Captures a single photo and saves it to the current working directory.
4
+
5
+ GPhoto2::Camera.first do |camera|
6
+ file = camera.capture
7
+ file.save
8
+ end
@@ -0,0 +1,27 @@
1
+ require 'gphoto2'
2
+
3
+ # This example is limited to Nikon cameras with a continuous burst mode.
4
+
5
+ # The number of frames to capture.
6
+ N = 3
7
+
8
+ GPhoto2::Camera.first do |camera|
9
+ # Set the camera to continuous burst mode.
10
+ camera.update(capturemode: 'Burst', burstnumber: N)
11
+
12
+ # Use `#trigger` instead of `#capture` so the data remains in the camera
13
+ # buffer.
14
+ camera.trigger
15
+
16
+ # Wait for the camera to process all the images.
17
+ queue = N.times.map do
18
+ event = camera.wait_for(:file_added)
19
+
20
+ # The event data contains a `CameraFile` when the `:file_added` event is
21
+ # triggered.
22
+ event.data
23
+ end
24
+
25
+ # Save all the images to the current working directory.
26
+ queue.each(&:save)
27
+ end
@@ -14,6 +14,7 @@ def visit(widget, level = 0)
14
14
 
15
15
  indent << ' '
16
16
 
17
+ puts "#{indent}label: #{widget.label}"
17
18
  puts "#{indent}type: #{widget.type}"
18
19
  puts "#{indent}value: #{widget.value}"
19
20
 
@@ -0,0 +1,52 @@
1
+ require 'gphoto2'
2
+
3
+ # Recursively list folder contents with extended metadata.
4
+
5
+ MAGNITUDES = %w[bytes KiB MiB GiB].freeze
6
+
7
+ # @param [Integer] size filesize in bytes
8
+ # @param [Integer[ precision
9
+ # @return [String]
10
+ def format_filesize(size, precision = 1)
11
+ n = 0
12
+
13
+ while size >= 1024.0 && n < MAGNITUDES.size
14
+ size /= 1024.0
15
+ n += 1
16
+ end
17
+
18
+ "%.#{precision}f %s" % [size, MAGNITUDES[n]]
19
+ end
20
+
21
+ # @param [CameraFolder] folder a root directory
22
+ def visit(folder)
23
+ files = folder.files
24
+
25
+ puts "#{folder.path} (#{files.size} files)"
26
+
27
+ files.each do |file|
28
+ info = file.info
29
+
30
+ name = file.name
31
+ # Avoid using `File#size` here to prevent having to load the data along
32
+ # with it.
33
+ size = format_filesize(info.size)
34
+ mtime = info.mtime.utc.iso8601
35
+
36
+ if info.has_field?(:width) && info.has_field?(:height)
37
+ dimensions = "#{info.width}x#{info.height}"
38
+ else
39
+ dimensions = '-'
40
+ end
41
+
42
+ puts "#{name.ljust(30)} #{size.rjust(12)} #{dimensions.rjust(12)} #{mtime}"
43
+ end
44
+
45
+ puts
46
+
47
+ folder.folders.each { |child| visit(child) }
48
+ end
49
+
50
+ GPhoto2::Camera.first do |camera|
51
+ visit(camera.filesystem)
52
+ end
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
9
9
  spec.homepage = 'https://github.com/zaeleus/ffi-gphoto2'
10
10
 
11
11
  spec.authors = ['Michael Macias']
12
- spec.email = ['mamacias@go.olemiss.edu']
12
+ spec.email = ['zaeleus@gmail.com']
13
13
 
14
14
  spec.version = GPhoto2::VERSION
15
15
  spec.license = 'MIT'
@@ -19,13 +19,14 @@ Gem::Specification.new do |spec|
19
19
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
20
  spec.require_paths = ['lib']
21
21
 
22
- spec.requirements << 'libgphoto2 >= 2.5.0'
23
- spec.required_ruby_version = '>= 1.9'
22
+ spec.requirements << 'libgphoto2 >= 2.5.2'
23
+ spec.requirements << 'libgphoto2_port >= 0.10.1'
24
+ spec.required_ruby_version = '>= 2.0'
24
25
 
25
- spec.add_development_dependency 'bundler', '~> 1.3'
26
- spec.add_development_dependency 'rake'
27
- spec.add_development_dependency 'rspec', '~> 3.2.0'
28
- spec.add_development_dependency 'yard', '~> 0.8.7'
26
+ spec.add_development_dependency 'bundler', '~> 2.0'
27
+ spec.add_development_dependency 'rake', '~> 13.0'
28
+ spec.add_development_dependency 'rspec', '~> 3.9.0'
29
+ spec.add_development_dependency 'yard', '~> 0.9.0'
29
30
 
30
- spec.add_dependency 'ffi', '~> 1.9.0'
31
+ spec.add_dependency 'ffi', '~> 1.12.0'
31
32
  end
@@ -1,3 +1,4 @@
1
+ require 'ffi'
1
2
  require 'ffi/gphoto2_port'
2
3
 
3
4
  module FFI
@@ -11,7 +12,10 @@ module FFI
11
12
  require 'ffi/gphoto2/camera_driver_status'
12
13
  require 'ffi/gphoto2/camera_event_type'
13
14
  require 'ffi/gphoto2/camera_file_access_type'
15
+ require 'ffi/gphoto2/camera_file_info_fields'
14
16
  require 'ffi/gphoto2/camera_file_operation'
17
+ require 'ffi/gphoto2/camera_file_permissions'
18
+ require 'ffi/gphoto2/camera_file_status'
15
19
  require 'ffi/gphoto2/camera_file_type'
16
20
  require 'ffi/gphoto2/camera_folder_operation'
17
21
  require 'ffi/gphoto2/camera_operation'
@@ -23,15 +27,19 @@ module FFI
23
27
  require 'ffi/gphoto2/camera_abilities'
24
28
  require 'ffi/gphoto2/camera_abilities_list'
25
29
  require 'ffi/gphoto2/camera_file'
30
+ require 'ffi/gphoto2/camera_file_info_audio'
31
+ require 'ffi/gphoto2/camera_file_info_file'
32
+ require 'ffi/gphoto2/camera_file_info_preview'
33
+ require 'ffi/gphoto2/camera_file_info'
26
34
  require 'ffi/gphoto2/camera_file_path'
35
+ require 'ffi/gphoto2/entry'
27
36
  require 'ffi/gphoto2/camera_list'
28
37
  require 'ffi/gphoto2/camera_widget'
29
- require 'ffi/gphoto2/entry'
30
38
  require 'ffi/gphoto2/gp_context'
31
39
 
32
40
  # gphoto2/gphoto2-abilities-list.h
33
41
  attach_function :gp_abilities_list_new, [:pointer], :int
34
- attach_function :gp_abilities_list_free, [CameraAbilitiesList.by_ref], :int
42
+ attach_function :gp_abilities_list_free, [:pointer], :int
35
43
  attach_function :gp_abilities_list_load, [CameraAbilitiesList.by_ref, GPContext.by_ref], :int
36
44
  attach_function :gp_abilities_list_detect, [CameraAbilitiesList.by_ref, GPhoto2Port::GPPortInfoList.by_ref, CameraList.by_ref, GPContext.by_ref], :int
37
45
  attach_function :gp_abilities_list_lookup_model, [CameraAbilitiesList.by_ref, :string], :int
@@ -47,10 +55,12 @@ module FFI
47
55
  attach_function :gp_camera_get_config, [Camera.by_ref, :pointer, GPContext.by_ref], :int
48
56
  attach_function :gp_camera_set_config, [Camera.by_ref, CameraWidget.by_ref, GPContext.by_ref], :int
49
57
  attach_function :gp_camera_capture, [Camera.by_ref, CameraCaptureType, CameraFilePath.by_ref, GPContext.by_ref], :int, blocking: true
58
+ attach_function :gp_camera_trigger_capture, [Camera.by_ref, GPContext.by_ref], :int, blocking: true
50
59
  attach_function :gp_camera_capture_preview, [Camera.by_ref, CameraFile.by_ref, GPContext.by_ref], :int, blocking: true
51
60
  attach_function :gp_camera_wait_for_event, [Camera.by_ref, :int, :pointer, :pointer, GPContext.by_ref], :int
52
61
  attach_function :gp_camera_folder_list_files, [Camera.by_ref, :string, CameraList.by_ref, GPContext.by_ref], :int
53
62
  attach_function :gp_camera_folder_list_folders, [Camera.by_ref, :string, CameraList.by_ref, GPContext.by_ref], :int
63
+ attach_function :gp_camera_file_get_info, [Camera.by_ref, :string, :string, CameraFileInfo.by_ref, GPContext.by_ref], :int
54
64
  attach_function :gp_camera_file_get, [Camera.by_ref, :string, :string, CameraFileType, CameraFile.by_ref, GPContext.by_ref], :int, blocking: true
55
65
  attach_function :gp_camera_file_delete, [Camera.by_ref, :string, :string, GPContext.by_ref], :int
56
66
 
@@ -61,12 +71,12 @@ module FFI
61
71
 
62
72
  # gphoto2/gphoto2-file.h
63
73
  attach_function :gp_file_new, [:pointer], :int
64
- attach_function :gp_file_free, [CameraFile.by_ref], :int
74
+ attach_function :gp_file_free, [:pointer], :int
65
75
  attach_function :gp_file_get_data_and_size, [CameraFile.by_ref, :pointer, :pointer], :int
66
76
 
67
77
  # gphoto2/gphoto2-list.h
68
78
  attach_function :gp_list_new, [:pointer], :int
69
- attach_function :gp_list_free, [CameraList.by_ref], :int
79
+ attach_function :gp_list_free, [:pointer], :int
70
80
  attach_function :gp_list_count, [CameraList.by_ref], :int
71
81
  attach_function :gp_list_get_name, [CameraList.by_ref, :int, :pointer], :int
72
82
  attach_function :gp_list_get_value, [CameraList.by_ref, :int, :pointer], :int
@@ -5,7 +5,7 @@ module FFI
5
5
  class CameraAbilitiesList < FFI::ManagedStruct
6
6
  # libgphoto2/gphoto2-abilities-list.c
7
7
  layout :count, :int,
8
- :abilities, :pointer # CameraAbilities*
8
+ :abilities, CameraAbilities.by_ref
9
9
 
10
10
  def self.release(ptr)
11
11
  FFI::GPhoto2.gp_abilities_list_free(ptr)
@@ -0,0 +1,10 @@
1
+ module FFI
2
+ module GPhoto2
3
+ class CameraFileInfo < FFI::Struct
4
+ # libgphoto2/gphoto2-filesys.h
5
+ layout :preview, CameraFileInfoPreview,
6
+ :file, CameraFileInfoFile,
7
+ :audio, CameraFileInfoAudio
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,11 @@
1
+ module FFI
2
+ module GPhoto2
3
+ class CameraFileInfoAudio < FFI::Struct
4
+ # gphoto2/gphoto2-filesys.h
5
+ layout :fields, CameraFileInfoFields,
6
+ :status, CameraFileStatus,
7
+ :size, :uint64,
8
+ :type, [:char, 64]
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,14 @@
1
+ module FFI
2
+ module GPhoto2
3
+ # gphoto2/gphoto2-filesys.h
4
+ CameraFileInfoFields = enum :none, 0,
5
+ :type, 1 << 0,
6
+ :size, 1 << 2,
7
+ :width, 1 << 3,
8
+ :height, 1 << 4,
9
+ :permissions, 1 << 5,
10
+ :status, 1 << 6,
11
+ :mtime, 1 << 7,
12
+ :all, 0xff
13
+ end
14
+ end
@@ -0,0 +1,15 @@
1
+ module FFI
2
+ module GPhoto2
3
+ class CameraFileInfoFile < FFI::Struct
4
+ # gphoto2/gphoto2-filesys.h
5
+ layout :fields, CameraFileInfoFields,
6
+ :status, CameraFileStatus,
7
+ :size, :uint64,
8
+ :type, [:char, 64],
9
+ :width, :uint32,
10
+ :height, :uint32,
11
+ :permissions, CameraFilePermissions,
12
+ :mtime, :time_t
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,13 @@
1
+ module FFI
2
+ module GPhoto2
3
+ class CameraFileInfoPreview < FFI::Struct
4
+ # gphoto2/gphoto2-filesys.h
5
+ layout :fields, CameraFileInfoFields,
6
+ :status, CameraFileStatus,
7
+ :size, :uint64,
8
+ :type, [:char, 64],
9
+ :width, :uint32,
10
+ :height, :uint32
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,9 @@
1
+ module FFI
2
+ module GPhoto2
3
+ # gphoto2/gphoto2-filesys.h
4
+ CameraFilePermissions = enum :none, 0,
5
+ :read, 1 << 0,
6
+ :delete, 1 << 1,
7
+ :all, 0xff
8
+ end
9
+ end
@@ -0,0 +1,7 @@
1
+ module FFI
2
+ module GPhoto2
3
+ # gphoto2/gphoto2-filesys.h
4
+ CameraFileStatus = enum :not_downloaded,
5
+ :downloaded
6
+ end
7
+ end