ruby-freenect 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,149 @@
1
+ module Freenect
2
+
3
+ FREENECT_COUNTS_PER_G = Driver::FREENECT_COUNTS_PER_G
4
+ FREENECT_DEVICE_FLAGS = Driver::FREENECT_DEVICE_FLAGS
5
+ FREENECT_RESOLUTION = Driver::FREENECT_RESOLUTION
6
+ FREENECT_VIDEO_FORMAT = Driver::FREENECT_VIDEO_FORMAT
7
+ FREENECT_DEPTH_FORMAT = Driver::FREENECT_DEPTH_FORMAT
8
+ FREENECT_LED_OPTIONS = Driver::FREENECT_LED_OPTIONS
9
+ FREENECT_TILT_STATUS_CODE = Driver::FREENECT_TILT_STATUS_CODE
10
+ FREENECT_LOGLEVEL = Driver::FREENECT_LOGLEVEL
11
+
12
+ class << self
13
+ def method_missing(meth, *args, &blk)
14
+ Interface.send(meth, *args, &blk)
15
+ end
16
+ def init(*args)
17
+ Context.new(*args)
18
+ end
19
+ end
20
+
21
+ class Context
22
+ include Freenect::Driver
23
+ attr_reader :context
24
+ def initialize
25
+ context_p = FFI::MemoryPointer.new(:pointer)
26
+ freenect_init(context_p, nil)
27
+ @context = context_p.read_pointer
28
+ end
29
+ def get_device_count
30
+ freenect_num_devices(context)
31
+ end
32
+ def close
33
+ freenect_shutdown(context)
34
+ end
35
+ end
36
+
37
+ class Interface
38
+ extend Freenect::Driver
39
+
40
+ @video_mode, @depth_mode = {}, {}
41
+
42
+ class << self
43
+
44
+ def get_device_count
45
+ context = Freenect::Context.new
46
+ count = context.get_device_count
47
+ context.close; count
48
+ end
49
+
50
+ def get_video_mode_count
51
+ freenect_get_video_mode_count
52
+ end
53
+
54
+ def get_video_mode(mode_id)
55
+ freenect_get_video_mode(mode_id)
56
+ end
57
+
58
+ def get_current_video_mode(idx=0)
59
+ (@video_mode || {})[idx]
60
+ end
61
+
62
+ def find_video_mode(format=:freenect_video_rgb, resolution=:freenect_resolution_medium)
63
+ freenect_find_video_mode(resolution, format)
64
+ end
65
+
66
+ def get_video(video_mode, idx=0)
67
+ video_p, timestamp_p = pointer(:pointer, 1), pointer(:uint32)
68
+ set_current_video_mode(video_mode, idx)
69
+ freenect_sync_get_video(video_p, timestamp_p, idx, Freenect::FREENECT_VIDEO_FORMAT[video_mode[:format][:video_format]])
70
+ video_p.read_pointer.get_bytes(0, video_mode[:bytes])
71
+ end
72
+
73
+ def get_depth_mode_count
74
+ freenect_get_depth_mode_count
75
+ end
76
+
77
+ def get_depth_mode(mode_id)
78
+ freenect_get_depth_mode(mode_id)
79
+ end
80
+
81
+ def get_current_depth_mode(idx=0)
82
+ (@depth_mode || {})[idx]
83
+ end
84
+
85
+ def find_depth_mode(format=:freenect_depth_11bit, resolution=:freenect_resolution_medium)
86
+ freenect_find_depth_mode(resolution, format)
87
+ end
88
+
89
+ def get_depth(depth_mode, idx=0)
90
+ depth_p, timestamp_p = pointer(:pointer, 1), pointer(:uint32)
91
+ set_current_depth_mode(depth_mode, idx)
92
+ freenect_sync_get_depth(depth_p, timestamp_p, idx, Freenect::FREENECT_DEPTH_FORMAT[depth_mode[:format][:depth_format]])
93
+ depth_p.read_pointer.get_bytes(0, depth_mode[:bytes])
94
+ end
95
+
96
+ def set_tilt(angle, idx=0)
97
+ freenect_sync_set_tilt_degs(angle, idx)
98
+ end
99
+
100
+ def get_tilt(tilt_state=nil, idx=0)
101
+ tilt_state ||= get_tilt_state(idx)
102
+ freenect_get_tilt_degs(tilt_state)
103
+ end
104
+
105
+ def get_tilt_status(tilt_state=nil, idx=0)
106
+ tilt_state ||= get_tilt_state(idx)
107
+ freenect_get_tilt_status(tilt_state)
108
+ end
109
+
110
+ def get_tilt_state(idx=0)
111
+ state_ptr = pointer(:pointer)
112
+ freenect_sync_get_tilt_state(state_ptr, idx)
113
+ FreenectRawTiltState.new(state_ptr.get_pointer(0))
114
+ end
115
+
116
+ def get_acceleration(tilt_state=nil, idx=0)
117
+ tilt_state ||= get_tilt_state(idx)
118
+ xacc = pointer(:double)
119
+ yacc = pointer(:double)
120
+ zacc = pointer(:double)
121
+ freenect_get_mks_accel(tilt_state, xacc, yacc, zacc)
122
+ {:x=>xacc.read_double, :y=>yacc.read_double, :z=>zacc.read_double}
123
+ end
124
+
125
+ def set_led(led_option, idx=0)
126
+ freenect_sync_set_led(Freenect::FREENECT_LED_OPTIONS[led_option], idx)
127
+ end
128
+
129
+ def stop
130
+ freenect_sync_stop()
131
+ end
132
+
133
+ private
134
+
135
+ def set_current_video_mode(video_mode, idx)
136
+ (@video_mode ||={})[idx] = video_mode
137
+ end
138
+
139
+ def set_current_depth_mode(depth_mode, idx)
140
+ (@depth_mode ||= {})[idx] = depth_mode
141
+ end
142
+
143
+ def pointer(*args)
144
+ FFI::MemoryPointer.new(*args)
145
+ end
146
+
147
+ end
148
+ end
149
+ end
@@ -0,0 +1,56 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "ruby-freenect"
8
+ s.version = "0.0.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Troy Stribling"]
12
+ s.date = "2012-01-02"
13
+ s.description = "Ruby bindings for the libfreenect Kinect driver"
14
+ s.extra_rdoc_files = [
15
+ "LICENSE.txt",
16
+ "README.rdoc"
17
+ ]
18
+ s.files = [
19
+ ".gems",
20
+ ".rvmrc",
21
+ "LICENSE.txt",
22
+ "README.rdoc",
23
+ "Rakefile",
24
+ "VERSION",
25
+ "examples/depth.rb",
26
+ "examples/ir.rb",
27
+ "examples/kinect.rb",
28
+ "examples/led.rb",
29
+ "examples/tilt.rb",
30
+ "examples/tools.rb",
31
+ "examples/video.rb",
32
+ "freenect4r.gemspec",
33
+ "lib/freenect.rb",
34
+ "lib/freenect/driver.rb",
35
+ "lib/freenect/freenect.rb",
36
+ "ruby-freenect.gemspec"
37
+ ]
38
+ s.homepage = "https://github.com/troystribling/freenect4r"
39
+ s.rdoc_options = ["--title", "FFI Freenect", "--main", "README.rdoc", "--line-numbers"]
40
+ s.require_paths = ["lib"]
41
+ s.rubygems_version = "1.8.10"
42
+ s.summary = "Ruby bindings for the libfreenect Kinect driver"
43
+
44
+ if s.respond_to? :specification_version then
45
+ s.specification_version = 3
46
+
47
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
48
+ s.add_runtime_dependency(%q<ffi>, [">= 1.0.11"])
49
+ else
50
+ s.add_dependency(%q<ffi>, [">= 1.0.11"])
51
+ end
52
+ else
53
+ s.add_dependency(%q<ffi>, [">= 1.0.11"])
54
+ end
55
+ end
56
+
metadata ADDED
@@ -0,0 +1,80 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruby-freenect
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Troy Stribling
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-01-02 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: ffi
16
+ requirement: &81131700 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 1.0.11
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *81131700
25
+ description: Ruby bindings for the libfreenect Kinect driver
26
+ email:
27
+ executables: []
28
+ extensions: []
29
+ extra_rdoc_files:
30
+ - LICENSE.txt
31
+ - README.rdoc
32
+ files:
33
+ - .gems
34
+ - .rvmrc
35
+ - LICENSE.txt
36
+ - README.rdoc
37
+ - Rakefile
38
+ - VERSION
39
+ - examples/depth.rb
40
+ - examples/ir.rb
41
+ - examples/kinect.rb
42
+ - examples/led.rb
43
+ - examples/tilt.rb
44
+ - examples/tools.rb
45
+ - examples/video.rb
46
+ - freenect4r.gemspec
47
+ - lib/freenect.rb
48
+ - lib/freenect/driver.rb
49
+ - lib/freenect/freenect.rb
50
+ - ruby-freenect.gemspec
51
+ homepage: https://github.com/troystribling/freenect4r
52
+ licenses: []
53
+ post_install_message:
54
+ rdoc_options:
55
+ - --title
56
+ - FFI Freenect
57
+ - --main
58
+ - README.rdoc
59
+ - --line-numbers
60
+ require_paths:
61
+ - lib
62
+ required_ruby_version: !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
65
+ - - ! '>='
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ required_rubygems_version: !ruby/object:Gem::Requirement
69
+ none: false
70
+ requirements:
71
+ - - ! '>='
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ requirements: []
75
+ rubyforge_project:
76
+ rubygems_version: 1.8.10
77
+ signing_key:
78
+ specification_version: 3
79
+ summary: Ruby bindings for the libfreenect Kinect driver
80
+ test_files: []