Class: Freenect::Device
- Inherits:
-
Object
- Object
- Freenect::Device
- Defined in:
- lib/freenect/device.rb
Class Method Summary collapse
-
.by_reference(devp) ⇒ Object
Returns a device object tracked by its ruby object reference ID stored in user data.
Instance Method Summary collapse
- #close ⇒ Object
- #closed? ⇒ Boolean
- #context ⇒ Object
-
#depth_format ⇒ Object
returns the symbolic constant for the current depth format.
- #device ⇒ Object
-
#get_tilt_degrees ⇒ Object
(also: #tilt)
Returns the current tilt angle.
- #get_tilt_state ⇒ Object (also: #tilt_state)
-
#initialize(ctx, idx) ⇒ Device
constructor
A new instance of Device.
- #reference_id ⇒ Object
-
#set_depth_callback {|device, depth_buf, timestamp| ... } ⇒ Object
(also: #on_depth)
Defines a handler for depth events.
- #set_depth_format(fmt) ⇒ Object (also: #depth_format=)
-
#set_led(mode) ⇒ Object
(also: #led=)
Sets the led to one of the following accepted values: :off, Freenect::LED_OFF :green, Freenect::LED_GREEN :red, Freenect::LED_RED :yellow, Freenect::LED_YELLOW :blink_yellow, Freenect::LED_BLINK_YELLOW :blink_green, Freenect::LED_BLINK_GREEN :blink_red_yellow, Freenect::LED_BLINK_RED_YELLOW.
-
#set_tilt_degrees(angle) ⇒ Object
(also: #tilt=)
Sets the tilt angle.
-
#set_video_callback {|device, video_buf, timestamp| ... } ⇒ Object
(also: #on_video)
Defines a handler for video events.
-
#set_video_format(fmt) ⇒ Object
(also: #video_format=)
Sets the video format to one of the following accepted values:.
- #start_depth ⇒ Object
- #start_video ⇒ Object
- #stop_depth ⇒ Object
- #stop_video ⇒ Object
- #video_format ⇒ Object
Constructor Details
#initialize(ctx, idx) ⇒ Device
Returns a new instance of Device.
23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/freenect/device.rb', line 23 def initialize(ctx, idx) dev_p = ::FFI::MemoryPointer.new(:pointer) @ctx = ctx if ::FFI::Freenect.freenect_open_device(@ctx.context, dev_p, idx) != 0 raise DeviceError, "unable to open device #{idx} from #{ctx.inspect}" end @dev = dev_p.read_pointer save_object_id!() end |
Class Method Details
.by_reference(devp) ⇒ Object
Returns a device object tracked by its ruby object reference ID stored in user data.
This method is intended for internal use.
16 17 18 19 20 21 |
# File 'lib/freenect/device.rb', line 16 def self.by_reference(devp) unless devp.null? or (refp=FFI::Freenect.freenect_get_user(devp)).null? obj=ObjectSpace._id2ref(refp.read_long_long) return obj if obj.is_a?(Device) end end |
Instance Method Details
#close ⇒ Object
39 40 41 42 43 44 45 |
# File 'lib/freenect/device.rb', line 39 def close unless closed? if ::FFI::Freenect.freenect_close_device(@dev) == 0 @dev_closed = true end end end |
#closed? ⇒ Boolean
35 36 37 |
# File 'lib/freenect/device.rb', line 35 def closed? @ctx.closed? or (@dev_closed == true) end |
#context ⇒ Object
55 56 57 |
# File 'lib/freenect/device.rb', line 55 def context @ctx end |
#depth_format ⇒ Object
returns the symbolic constant for the current depth format
148 149 150 |
# File 'lib/freenect/device.rb', line 148 def depth_format (@depth_format.is_a?(Numeric))? Freenect::DEPTH_FORMATS[@depth_format] : @depth_format end |
#device ⇒ Object
47 48 49 50 51 52 53 |
# File 'lib/freenect/device.rb', line 47 def device if closed? raise DeviceError, "this device is closed and can no longer be used" else return @dev end end |
#get_tilt_degrees ⇒ Object Also known as: tilt
Returns the current tilt angle
70 71 72 |
# File 'lib/freenect/device.rb', line 70 def get_tilt_degrees ::FFI::Freenect.freenect_get_tilt_degs(self.device) end |
#get_tilt_state ⇒ Object Also known as: tilt_state
59 60 61 62 63 64 65 |
# File 'lib/freenect/device.rb', line 59 def get_tilt_state unless (p=::FFI::Freenect.freenect_get_tilt_state(self.device)).null? return RawTiltState.new(p) else raise DeviceError, "freenect_get_tilt_state() returned a NULL tilt_state" end end |
#reference_id ⇒ Object
186 187 188 189 190 |
# File 'lib/freenect/device.rb', line 186 def reference_id unless (p=::FFI::Freenect.freenect_get_user(device)).null? p.read_long_long end end |
#set_depth_callback {|device, depth_buf, timestamp| ... } ⇒ Object Also known as: on_depth
Defines a handler for depth events.
91 92 93 94 |
# File 'lib/freenect/device.rb', line 91 def set_depth_callback(&block) @depth_callback = block ::FFI::Freenect.freenect_set_depth_callback(self.device, @depth_callback) end |
#set_depth_format(fmt) ⇒ Object Also known as: depth_format=
135 136 137 138 139 140 141 142 143 |
# File 'lib/freenect/device.rb', line 135 def set_depth_format(fmt) l_fmt = fmt.is_a?(Numeric)? fmt : Freenect::DEPTH_FORMATS[fmt] ret = ::FFI::Freenect.freenect_set_depth_format(self.device, l_fmt) if (ret== 0) @depth_format = fmt else raise DeviceError, "Error calling freenect_set_depth_format(self, #{fmt})" end end |
#set_led(mode) ⇒ Object Also known as: led=
Sets the led to one of the following accepted values:
:off, Freenect::LED_OFF
:green, Freenect::LED_GREEN
:red, Freenect::LED_RED
:yellow, Freenect::LED_YELLOW
:blink_yellow, Freenect::LED_BLINK_YELLOW
:blink_green, Freenect::LED_BLINK_GREEN
:blink_red_yellow, Freenect::LED_BLINK_RED_YELLOW
Either the symbol or numeric constant can be specified.
180 181 182 |
# File 'lib/freenect/device.rb', line 180 def set_led(mode) return(::FFI::Freenect.freenect_set_led(self.device, mode) == 0) end |
#set_tilt_degrees(angle) ⇒ Object Also known as: tilt=
Sets the tilt angle. Maximum tilt angle range is between +30 and -30
78 79 80 81 |
# File 'lib/freenect/device.rb', line 78 def set_tilt_degrees(angle) ::FFI::Freenect.freenect_set_tilt_degs(self.device, angle) return(update_tilt_state() < 0) # based on libfreenect error cond. as of 12-21-10 end |
#set_video_callback {|device, video_buf, timestamp| ... } ⇒ Object Also known as: on_video
Defines a handler for video events.
104 105 106 107 |
# File 'lib/freenect/device.rb', line 104 def set_video_callback(&block) @video_callback = block ::FFI::Freenect.freenect_set_video_callback(self.device, @video_callback) end |
#set_video_format(fmt) ⇒ Object Also known as: video_format=
Sets the video format to one of the following accepted values:
154 155 156 157 158 159 160 161 162 |
# File 'lib/freenect/device.rb', line 154 def set_video_format(fmt) l_fmt = fmt.is_a?(Numeric)? fmt : Freenect::VIDEO_FORMATS[fmt] ret = ::FFI::Freenect.freenect_set_video_format(self.device, l_fmt) if (ret== 0) @video_format = fmt else raise DeviceError, "Error calling freenect_set_video_format(self, #{fmt})" end end |
#start_depth ⇒ Object
111 112 113 114 115 |
# File 'lib/freenect/device.rb', line 111 def start_depth unless(::FFI::Freenect.freenect_start_depth(self.device) == 0) raise DeviceError, "Error in freenect_start_depth()" end end |
#start_video ⇒ Object
123 124 125 126 127 |
# File 'lib/freenect/device.rb', line 123 def start_video unless(::FFI::Freenect.freenect_start_video(self.device) == 0) raise DeviceError, "Error in freenect_start_video()" end end |
#stop_depth ⇒ Object
117 118 119 120 121 |
# File 'lib/freenect/device.rb', line 117 def stop_depth unless(::FFI::Freenect.freenect_stop_depth(self.device) == 0) raise DeviceError, "Error in freenect_stop_depth()" end end |
#stop_video ⇒ Object
129 130 131 132 133 |
# File 'lib/freenect/device.rb', line 129 def stop_video unless(::FFI::Freenect.freenect_stop_video(self.device) == 0) raise DeviceError, "Error in freenect_stop_video()" end end |
#video_format ⇒ Object
166 167 168 |
# File 'lib/freenect/device.rb', line 166 def video_format (@video_format.is_a?(Numeric))? ::Freenect::VIDEO_FORMATS[@video_format] : @video_format end |