phidgets-ffi 0.0.5 → 0.1.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.
- data/.gitignore +3 -0
- data/LICENSE +1 -1
- data/README.rdoc +92 -42
- data/examples/accelerometer.rb +39 -0
- data/examples/advanced_servo.rb +94 -0
- data/examples/analog.rb +43 -0
- data/examples/bridge.rb +57 -0
- data/examples/dictionary.rb +46 -31
- data/examples/encoder.rb +59 -0
- data/examples/frequency_counter.rb +63 -0
- data/examples/gps.rb +91 -0
- data/examples/interface_kit_with_block.rb +68 -0
- data/examples/interface_kit_without_block.rb +60 -0
- data/examples/ir.rb +157 -0
- data/examples/led.rb +36 -0
- data/examples/manager.rb +16 -10
- data/examples/motor_control.rb +108 -0
- data/examples/{ffi → raw-ffi}/dictionary.rb +11 -1
- data/examples/{ffi → raw-ffi}/interface_kit.rb +19 -2
- data/examples/{ffi → raw-ffi}/library_version.rb +0 -0
- data/examples/{ffi → raw-ffi}/log.rb +0 -0
- data/examples/{ffi → raw-ffi}/manager.rb +6 -3
- data/examples/rfid.rb +63 -0
- data/examples/servo.rb +45 -30
- data/examples/spatial.rb +75 -0
- data/examples/stepper.rb +87 -0
- data/examples/temperature_sensor.rb +49 -0
- data/examples/text_lcd.rb +101 -0
- data/lib/phidgets-ffi.rb +34 -3
- data/lib/phidgets-ffi/accelerometer.rb +122 -0
- data/lib/phidgets-ffi/advanced_servo.rb +304 -0
- data/lib/phidgets-ffi/analog.rb +111 -0
- data/lib/phidgets-ffi/bridge.rb +167 -0
- data/lib/phidgets-ffi/common.rb +506 -103
- data/lib/phidgets-ffi/dictionary.rb +136 -23
- data/lib/phidgets-ffi/encoder.rb +196 -0
- data/lib/phidgets-ffi/error.rb +8 -3
- data/lib/phidgets-ffi/ffi/accelerometer.rb +30 -0
- data/lib/phidgets-ffi/ffi/advanced_servo.rb +73 -0
- data/lib/phidgets-ffi/ffi/analog.rb +29 -0
- data/lib/phidgets-ffi/ffi/bridge.rb +44 -0
- data/lib/phidgets-ffi/ffi/common.rb +51 -34
- data/lib/phidgets-ffi/ffi/constants.rb +3 -1
- data/lib/phidgets-ffi/ffi/dictionary.rb +25 -20
- data/lib/phidgets-ffi/ffi/encoder.rb +32 -0
- data/lib/phidgets-ffi/ffi/frequency_counter.rb +38 -0
- data/lib/phidgets-ffi/ffi/gps.rb +32 -0
- data/lib/phidgets-ffi/ffi/interface_kit.rb +26 -23
- data/lib/phidgets-ffi/ffi/ir.rb +50 -0
- data/lib/phidgets-ffi/ffi/led.rb +40 -0
- data/lib/phidgets-ffi/ffi/log.rb +7 -6
- data/lib/phidgets-ffi/ffi/manager.rb +35 -20
- data/lib/phidgets-ffi/ffi/motor_control.rb +66 -0
- data/lib/phidgets-ffi/ffi/rfid.rb +36 -0
- data/lib/phidgets-ffi/ffi/servo.rb +16 -15
- data/lib/phidgets-ffi/ffi/spatial.rb +40 -0
- data/lib/phidgets-ffi/ffi/stepper.rb +56 -0
- data/lib/phidgets-ffi/ffi/temperature_sensor.rb +42 -0
- data/lib/phidgets-ffi/ffi/text_lcd.rb +55 -0
- data/lib/phidgets-ffi/frequency_counter.rb +148 -0
- data/lib/phidgets-ffi/gps.rb +181 -0
- data/lib/phidgets-ffi/interface_kit.rb +205 -92
- data/lib/phidgets-ffi/ir.rb +290 -0
- data/lib/phidgets-ffi/led.rb +112 -0
- data/lib/phidgets-ffi/log.rb +14 -2
- data/lib/phidgets-ffi/manager.rb +143 -26
- data/lib/phidgets-ffi/motor_control.rb +497 -0
- data/lib/phidgets-ffi/phidgets-ffi.rb +15 -2
- data/lib/phidgets-ffi/rfid.rb +220 -0
- data/lib/phidgets-ffi/servo.rb +103 -61
- data/lib/phidgets-ffi/spatial.rb +306 -0
- data/lib/phidgets-ffi/stepper.rb +370 -0
- data/lib/phidgets-ffi/temperature_sensor.rb +157 -0
- data/lib/phidgets-ffi/text_lcd.rb +298 -0
- data/lib/phidgets-ffi/version.rb +1 -1
- data/phidgets-ffi.gemspec +2 -2
- metadata +89 -76
- data/examples/ffi/servo.rb +0 -67
- data/examples/interface_kit.rb +0 -20
@@ -0,0 +1,157 @@
|
|
1
|
+
module Phidgets
|
2
|
+
|
3
|
+
# This class represents a PhidgetTemperatureSensor.
|
4
|
+
class TemperatureSensor
|
5
|
+
|
6
|
+
Klass = Phidgets::FFI::CPhidgetTemperatureSensor
|
7
|
+
include Phidgets::Common
|
8
|
+
|
9
|
+
# Collection of temperature sensor sensors
|
10
|
+
# @return [TemperatureSensorSensors]
|
11
|
+
attr_reader :thermocouples
|
12
|
+
|
13
|
+
attr_reader :attributes
|
14
|
+
|
15
|
+
# The attributes of a PhidgetTemperatureSensor
|
16
|
+
def attributes
|
17
|
+
super.merge({
|
18
|
+
:thermocouples => thermocouples.size,
|
19
|
+
})
|
20
|
+
end
|
21
|
+
|
22
|
+
# Sets a temperature change handler callback function. This is called when when the temperature has changed atleast by the sensitivity value that has been set.
|
23
|
+
#
|
24
|
+
# @param [String] obj Object to pass to the callback function. This is optional.
|
25
|
+
# @param [Proc] Block When the callback is executed, the device and object are yielded to this block.
|
26
|
+
# @example
|
27
|
+
# temp.on_temperature_change do |device, input, temperature, obj|
|
28
|
+
# puts "Input #{input.index}'s temperature changed to #{temperature}"
|
29
|
+
# end
|
30
|
+
# As this runs in it's own thread, be sure that all errors are properly handled or the thread will halt and not fire any more.
|
31
|
+
# @return [Boolean] returns true or raises an error
|
32
|
+
def on_temperature_change(obj=nil, &block)
|
33
|
+
@on_temperature_change_obj = obj
|
34
|
+
@on_temperature_change = Proc.new { |device, obj_ptr, index, temperature|
|
35
|
+
yield self, @thermocouples[index], temperature, object_for(obj_ptr)
|
36
|
+
}
|
37
|
+
Klass.set_OnTemperatureChange_Handler(@handle, @on_temperature_change, pointer_for(obj))
|
38
|
+
end
|
39
|
+
|
40
|
+
|
41
|
+
# This class represents a thermocouple sensor attached for a PhidgetTemperatureSensor. All the properties of an thermocouple sensor are stored and modified in this class.
|
42
|
+
class TemperatureSensorSensors
|
43
|
+
Klass = Phidgets::FFI::CPhidgetTemperatureSensor
|
44
|
+
|
45
|
+
private
|
46
|
+
def initialize(handle, index)
|
47
|
+
@handle, @index = handle, index.to_i
|
48
|
+
end
|
49
|
+
|
50
|
+
public
|
51
|
+
# Displays data for the thermocouple sensor.
|
52
|
+
def inspect
|
53
|
+
"#<#{self.class} @index=#{index}, @sensitivity=#{sensitivity}, @temperature_min=#{temperature_min}, @temperature_max=#{temperature_max}, @type=#{type}>"
|
54
|
+
end
|
55
|
+
|
56
|
+
# @return [Integer] returns index of the thermocouple sensor, or raises an error.
|
57
|
+
def index
|
58
|
+
@index
|
59
|
+
end
|
60
|
+
|
61
|
+
# @return [Float] returns the potential of the thermocouple sensor, in mV, or raises an error.
|
62
|
+
def potential
|
63
|
+
ptr = ::FFI::MemoryPointer.new(:double)
|
64
|
+
Klass.getPotential(@handle, @index, ptr)
|
65
|
+
ptr.get_double(0)
|
66
|
+
end
|
67
|
+
|
68
|
+
# @return [Float] returns the smallest potential that the thermocouple sensor can return, in mV, or raises an error.
|
69
|
+
def potential_min
|
70
|
+
ptr = ::FFI::MemoryPointer.new(:double)
|
71
|
+
Klass.getPotentialMin(@handle, @index, ptr)
|
72
|
+
ptr.get_double(0)
|
73
|
+
end
|
74
|
+
|
75
|
+
# @return [Float] returns the largest potential that the thermocouple sensor can return, in mV, or raises an error.
|
76
|
+
def potential_max
|
77
|
+
ptr = ::FFI::MemoryPointer.new(:double)
|
78
|
+
Klass.getPotentialMax(@handle, @index, ptr)
|
79
|
+
ptr.get_double(0)
|
80
|
+
end
|
81
|
+
|
82
|
+
# @return [Float] returns the temperature change trigger sensitivity for the thermocouple sensor, or raises an error.
|
83
|
+
def sensitivity
|
84
|
+
ptr = ::FFI::MemoryPointer.new(:double)
|
85
|
+
Klass.getTemperatureChangeTrigger(@handle, @index, ptr)
|
86
|
+
ptr.get_double(0)
|
87
|
+
end
|
88
|
+
|
89
|
+
# Sets the temperature change trigger sensitivity of the thermocouple sensor, or raises an error.
|
90
|
+
# @param [Float] new_senstivity new sensitivity
|
91
|
+
# @return [Float] returns the temperature change trigger sensitivity of the thermocouple sensor, or raises an error.
|
92
|
+
def sensitivity=(new_sensitivity)
|
93
|
+
Klass.setTemperatureChangeTrigger(@handle, @index, new_sensitivity.to_f)
|
94
|
+
new_sensitivity
|
95
|
+
end
|
96
|
+
|
97
|
+
# @return [Float] returns the temperature of the thermocouple sensor, in degrees celcius, or raises an error.
|
98
|
+
def temperature
|
99
|
+
ptr = ::FFI::MemoryPointer.new(:double)
|
100
|
+
Klass.getTemperature(@handle, @index, ptr)
|
101
|
+
ptr.get_double(0)
|
102
|
+
end
|
103
|
+
|
104
|
+
# @return [Float] returns the minimum temperature value that the thermocouple sensor can return, in degrees celcius, or raises an error.
|
105
|
+
def temperature_min
|
106
|
+
ptr = ::FFI::MemoryPointer.new(:double)
|
107
|
+
Klass.getTemperatureMin(@handle, @index, ptr)
|
108
|
+
ptr.get_double(0)
|
109
|
+
end
|
110
|
+
|
111
|
+
# @return [Float] returns the maximum temperature value that the thermocouple sensor can return, in degrees celcius, or raises an error.
|
112
|
+
def temperature_max
|
113
|
+
ptr = ::FFI::MemoryPointer.new(:double)
|
114
|
+
Klass.getTemperatureMax(@handle, @index, ptr)
|
115
|
+
ptr.get_double(0)
|
116
|
+
end
|
117
|
+
|
118
|
+
# @return [Phidgets::FFI::TemperatureSensorThermocoupleTypes] returns the thermocouple type of the thermocouple sensor, or raises an error.
|
119
|
+
def type
|
120
|
+
ptr = ::FFI::MemoryPointer.new(:int)
|
121
|
+
Klass.getThermocoupleType(@handle, @index, ptr)
|
122
|
+
Phidgets::FFI::TemperatureSensorThermocoupleTypes[ptr.get_int(0)]
|
123
|
+
end
|
124
|
+
|
125
|
+
# Sets the thermocouple type of the thermocouple sensor, or raises an error.
|
126
|
+
# @param [Phidgets::FFI::TemperatureSensorThermocoupleTypes] new_type new type
|
127
|
+
# @return [Phidgets::FFI::TemperatureSensorThermocoupleTypes] returns the thermocouple type of the thermocouple sensor, or raises an error.
|
128
|
+
def type=(new_type)
|
129
|
+
ptr = ::FFI::MemoryPointer.new(:int)
|
130
|
+
Klass.setThermocoupleType(@handle, @index, Phidgets::FFI::TemperatureSensorThermocoupleTypes[new_type])
|
131
|
+
new_type
|
132
|
+
end
|
133
|
+
|
134
|
+
end #TemperatureSensorSensors
|
135
|
+
|
136
|
+
private
|
137
|
+
|
138
|
+
def load_device_attributes
|
139
|
+
load_thermocouples
|
140
|
+
end
|
141
|
+
|
142
|
+
def load_thermocouples
|
143
|
+
ptr = ::FFI::MemoryPointer.new(:int)
|
144
|
+
Klass.getTemperatureInputCount(@handle, ptr)
|
145
|
+
|
146
|
+
@thermocouples = []
|
147
|
+
ptr.get_int(0).times do |i|
|
148
|
+
@thermocouples << TemperatureSensorSensors.new(@handle, i)
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
def remove_specific_event_handlers
|
153
|
+
Klass.set_OnTemperatureChange_Handler(@handle, nil, nil)
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
end
|
@@ -0,0 +1,298 @@
|
|
1
|
+
module Phidgets
|
2
|
+
|
3
|
+
# This class represents a PhidgetTextLCD.
|
4
|
+
class TextLCD
|
5
|
+
|
6
|
+
Klass = Phidgets::FFI::CPhidgetTextLCD
|
7
|
+
include Phidgets::Common
|
8
|
+
|
9
|
+
# Collection of screens
|
10
|
+
# @return [TextLCDScreens]
|
11
|
+
attr_reader :screens
|
12
|
+
|
13
|
+
# Collection of custom characters that is defined for the PhidgetTextLCD
|
14
|
+
# @return [TextLCDCustomCharacter]
|
15
|
+
attr_reader :custom_characters
|
16
|
+
|
17
|
+
attr_reader :attributes
|
18
|
+
|
19
|
+
# The attributes of a PhidgetTextLCD
|
20
|
+
def attributes
|
21
|
+
super.merge({
|
22
|
+
:screens => screens.size
|
23
|
+
})
|
24
|
+
end
|
25
|
+
|
26
|
+
# This class represents a screen a PhidgetTextLCD. All the properties of a screen are stored and modified in this class.
|
27
|
+
class TextLCDScreens
|
28
|
+
Klass = Phidgets::FFI::CPhidgetTextLCD
|
29
|
+
|
30
|
+
private
|
31
|
+
def initialize(handle, index)
|
32
|
+
@handle, @index = handle, index.to_i
|
33
|
+
load_rows(0)
|
34
|
+
end
|
35
|
+
|
36
|
+
public
|
37
|
+
# Displays data for the servo motor.
|
38
|
+
def inspect
|
39
|
+
"#<#{self.class} @index=#{index}>"
|
40
|
+
end
|
41
|
+
|
42
|
+
# Collection of rows of text display in a PhidgetTextLCD
|
43
|
+
# @return [TextLCDScreensRows]
|
44
|
+
attr_reader :rows
|
45
|
+
|
46
|
+
# @return [Integer] returns index of the screen, or raises an error.
|
47
|
+
def index
|
48
|
+
@index
|
49
|
+
end
|
50
|
+
|
51
|
+
# @return [Boolean] returns the back light state of a screen, or raises an error.
|
52
|
+
def back_light
|
53
|
+
try_set_screen
|
54
|
+
ptr = ::FFI::MemoryPointer.new(:int)
|
55
|
+
Klass.getBacklight(@handle, ptr)
|
56
|
+
(ptr.get_int(0) == 0) ? false : true
|
57
|
+
end
|
58
|
+
|
59
|
+
# Sets the back light state of a screen, or raises an error.
|
60
|
+
# @param [Boolean] new_state new state
|
61
|
+
# @return [Boolean] returns the back light state of a screen, or raises an error.
|
62
|
+
def back_light=(new_state)
|
63
|
+
try_set_screen
|
64
|
+
tmp = new_state ? 1 : 0
|
65
|
+
Klass.setBacklight(@handle, tmp)
|
66
|
+
new_state
|
67
|
+
end
|
68
|
+
|
69
|
+
# @return [Integer] returns the brightness value of a screen, or raises an error. Not all PhidgetTextLCDs support brightness.
|
70
|
+
def brightness
|
71
|
+
try_set_screen
|
72
|
+
ptr = ::FFI::MemoryPointer.new(:int)
|
73
|
+
Klass.getBrightness(@handle, ptr)
|
74
|
+
ptr.get_int(0)
|
75
|
+
end
|
76
|
+
|
77
|
+
# Sets the brightness value of a screen, or raises an error. Not all PhidgetTextLCDs support brightness.
|
78
|
+
# @param [Integer] new_brightness new brightness(0-255)
|
79
|
+
# @return [Integer] returns the brightness value of a screen, or raises an error.
|
80
|
+
def brightness=(new_brightness)
|
81
|
+
try_set_screen
|
82
|
+
Klass.setBrightness(@handle, new_brightness.to_i)
|
83
|
+
new_brightness.to_i
|
84
|
+
end
|
85
|
+
|
86
|
+
# @return [Integer] returns the contrast of a screen, or raises an error.
|
87
|
+
def contrast
|
88
|
+
try_set_screen
|
89
|
+
ptr = ::FFI::MemoryPointer.new(:int)
|
90
|
+
Klass.getContrast(@handle, ptr)
|
91
|
+
ptr.get_int(0)
|
92
|
+
end
|
93
|
+
|
94
|
+
# Sets the contrast value of a screen, or raises an error.
|
95
|
+
# @param [Integer] new_contrast new contrast(0-255)
|
96
|
+
# @return [Integer] returns the contrast value of a screen, or raises an error.
|
97
|
+
def contrast=(new_contrast)
|
98
|
+
try_set_screen
|
99
|
+
Klass.setContrast(@handle, new_contrast.to_i)
|
100
|
+
new_contrast.to_i
|
101
|
+
end
|
102
|
+
|
103
|
+
# The cursor is an underscore which appears directly to the right of the last entered character on the display.
|
104
|
+
# @return [Boolean] returns the cursor state of a screen, or raises an error.
|
105
|
+
def cursor
|
106
|
+
try_set_screen
|
107
|
+
ptr = ::FFI::MemoryPointer.new(:int)
|
108
|
+
Klass.getCursonOn(@handle, ptr)
|
109
|
+
(ptr.get_int(0) == 0) ? false : true
|
110
|
+
end
|
111
|
+
|
112
|
+
# Sets the cursor state of a screen, or raises an error.
|
113
|
+
# @param [Boolean] new_state new state
|
114
|
+
# @return [Boolean] returns the cursor state of a screen, or raises an error.
|
115
|
+
def cursor=(new_state)
|
116
|
+
try_set_screen
|
117
|
+
tmp = new_state ? 1 : 0
|
118
|
+
Klass.setCursorOn(@handle, tmp)
|
119
|
+
new_state
|
120
|
+
end
|
121
|
+
|
122
|
+
# The cursor blink is a flashing box which appears directly to the right of the last entered character on the display, in the same apot as the cursor if it is enabled.
|
123
|
+
# @return [Boolean] returns the cursor blink state of a screen, or raises an error.
|
124
|
+
def cursor_blink
|
125
|
+
try_set_screen
|
126
|
+
ptr = ::FFI::MemoryPointer.new(:int)
|
127
|
+
Klass.getCursonBlink(@handle, ptr)
|
128
|
+
(ptr.get_int(0) == 0) ? false : true
|
129
|
+
end
|
130
|
+
|
131
|
+
# Sets the cursor blink state of a screen, or raises an error.
|
132
|
+
# @param [Boolean] new_state new state
|
133
|
+
# @return [Boolean] returns the cursor blink state of a screen, or raises an error.
|
134
|
+
def cursor_blink=(new_state)
|
135
|
+
try_set_screen
|
136
|
+
tmp = new_state ? 1 : 0
|
137
|
+
Klass.setCursorBlink(@handle, tmp)
|
138
|
+
new_state
|
139
|
+
end
|
140
|
+
|
141
|
+
# @return [Phidgets::FFI::TextLCDScreenSizes] returns the screen size of a screen, or raises an error. Not all PhidgetTextLCDs support screen_size.
|
142
|
+
def screen_size
|
143
|
+
try_set_screen
|
144
|
+
ptr = ::FFI::MemoryPointer.new(:int)
|
145
|
+
Klass.getScreenSize(@handle, ptr)
|
146
|
+
Phidgets::FFI::TextLCDScreenSizes[ptr.get_int(0)]
|
147
|
+
end
|
148
|
+
|
149
|
+
# Sets the screen size of a screen, or raises an error. Not all PhidgetTextLCDs support screen_size.
|
150
|
+
# @param [Phidgets::FFI::TextLCDScreenSizes] new_screen_size new screen size
|
151
|
+
# @return [Phidgets::FFI::TextLCDScreenSizes] returns the screen size of a screen, or raises an error.
|
152
|
+
def screen_size=(new_screen_size)
|
153
|
+
try_set_screen
|
154
|
+
Klass.setScreenSize(@handle, Phidgets::FFI::TextLCDScreenSizes[new_screen_size])
|
155
|
+
|
156
|
+
load_rows(@index) #readjust screen rows
|
157
|
+
new_screen_size
|
158
|
+
end
|
159
|
+
|
160
|
+
# Initializes a screen, or raises an error. Not all PhidgetTextLCDs support initialize
|
161
|
+
# @return [Boolean] returns true if the screen was successfully initialize, or raises an error.
|
162
|
+
def initialize_screen
|
163
|
+
try_set_screen
|
164
|
+
Klass.initialize(@handle)
|
165
|
+
true
|
166
|
+
end
|
167
|
+
|
168
|
+
# This class represents a row on a PhidgetTextLCD screen. All the properties of a row are stored and modified in this class.
|
169
|
+
class TextLCDScreensRows
|
170
|
+
Klass = Phidgets::FFI::CPhidgetTextLCD
|
171
|
+
|
172
|
+
private
|
173
|
+
def initialize(handle, row, screen_index)
|
174
|
+
@handle, @row, @screen_index = handle, row.to_i, screen_index.to_i
|
175
|
+
end
|
176
|
+
|
177
|
+
public
|
178
|
+
|
179
|
+
# Sets the display string of a row, or raises an error.
|
180
|
+
#
|
181
|
+
# example
|
182
|
+
# lcd.screens[0].rows[1].display_string = "\x48" #hex for H in ASCII
|
183
|
+
# lcd.screens[0].rows[2].display_string = "\147" #octal for g in ASCII
|
184
|
+
# @param [String] new_string string
|
185
|
+
# @return [String] returns the display string, or raises an error.
|
186
|
+
def display_string=(new_display_string)
|
187
|
+
if (Common.device_id(@handle).to_s == "textlcd_adapter")
|
188
|
+
Klass.setScreen(@handle, @screen_index)
|
189
|
+
end
|
190
|
+
Klass.setDisplayString(@handle, @row, new_display_string)
|
191
|
+
new_display_string
|
192
|
+
end
|
193
|
+
|
194
|
+
# Sets a single character for a specific column of a row, or raises an error.
|
195
|
+
#
|
196
|
+
# example
|
197
|
+
# lcd.screens[0].rows[1].display_character(4, 0x21) #hex for ! in ASCII
|
198
|
+
# lcd.screens[0].rows[1].display_character(5, 067) #octal for 7 in ASCII
|
199
|
+
# @param [Integer] column column number
|
200
|
+
# @param [Integer] new_character new character(in hexadecimal, octal, etc..)
|
201
|
+
# @return [Integer] returns the character, or raises an error.
|
202
|
+
def display_character(column, new_display_character)
|
203
|
+
if (Common.device_id(@handle).to_s == "textlcd_adapter")
|
204
|
+
Klass.setScreen(@handle, @screen_index)
|
205
|
+
end
|
206
|
+
Klass.setDisplayCharacter(@handle, @row, column, new_display_character)
|
207
|
+
new_display_character
|
208
|
+
end
|
209
|
+
|
210
|
+
# @return [Integer] returns the maximum length of a row, or raises an error.
|
211
|
+
def maximum_length
|
212
|
+
ptr = ::FFI::MemoryPointer.new(:int)
|
213
|
+
Klass.getColumnCount(@handle, ptr)
|
214
|
+
ptr.get_int(0)
|
215
|
+
end
|
216
|
+
end #TextLCDScreensRows
|
217
|
+
|
218
|
+
private
|
219
|
+
def load_rows(index)
|
220
|
+
ptr = ::FFI::MemoryPointer.new(:int)
|
221
|
+
Klass.getRowCount(@handle, ptr)
|
222
|
+
@rows = []
|
223
|
+
ptr.get_int(0).times do |i|
|
224
|
+
@rows << TextLCDScreensRows.new(@handle, i, index)
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
#Attemps to set the screen for a PhidgetTextLCD Adapter
|
229
|
+
def try_set_screen
|
230
|
+
if (Common.device_id(@handle).to_s == "textlcd_adapter")
|
231
|
+
Klass.setScreen(@handle, @index)
|
232
|
+
end
|
233
|
+
end
|
234
|
+
|
235
|
+
end #TextLCDScreens
|
236
|
+
|
237
|
+
|
238
|
+
# This class represents a custom character that are defined by a PhidgetTextLCD. All the properties of a custom character are stored and modified in this class.
|
239
|
+
class TextLCDCustomCharacter
|
240
|
+
Klass = Phidgets::FFI::CPhidgetTextLCD
|
241
|
+
|
242
|
+
private
|
243
|
+
def initialize(handle, index)
|
244
|
+
@handle, @index = handle, index.to_i
|
245
|
+
end
|
246
|
+
|
247
|
+
public
|
248
|
+
|
249
|
+
# Sets a custom character, or raises an error. The custom character is defined by two integers. See the product manual for more information.
|
250
|
+
# example
|
251
|
+
# lcd.custom_characters[0].set_custom_character(949247, 536)
|
252
|
+
# @param [Integer] first_value first value given by the customchar utility
|
253
|
+
# @param [Integer] second_value second value given by teh customchar utility
|
254
|
+
# @return [Array<Integer>[2]] returns the custom character, or raises an error.
|
255
|
+
def set_custom_character(var1, var2)
|
256
|
+
Klass.setCustomCharacter(@handle, @index + 8, var1, var2)
|
257
|
+
[var1, var2]
|
258
|
+
end
|
259
|
+
|
260
|
+
# Returns the character code associated with the custom character, or raises an error.
|
261
|
+
#
|
262
|
+
# example
|
263
|
+
# lcd.screens[0].rows[0].display_string = "#{lcd.custom_characters[0].string_code}"
|
264
|
+
# @return [String] returns the character code associated with the custom character, or raises an error.
|
265
|
+
def string_code
|
266
|
+
eval('"' + "\\1#{@index}" + '"') #ie, returns \10 - \17
|
267
|
+
end
|
268
|
+
|
269
|
+
end #TextLCDCustomCharacter
|
270
|
+
|
271
|
+
private
|
272
|
+
|
273
|
+
def load_device_attributes
|
274
|
+
load_screens
|
275
|
+
load_custom_characters
|
276
|
+
end
|
277
|
+
|
278
|
+
def load_screens
|
279
|
+
ptr = ::FFI::MemoryPointer.new(:int)
|
280
|
+
Klass.getScreenCount(@handle, ptr)
|
281
|
+
@screens = []
|
282
|
+
ptr.get_int(0).times do |i|
|
283
|
+
@screens << TextLCDScreens.new(@handle, i)
|
284
|
+
end
|
285
|
+
end
|
286
|
+
|
287
|
+
def load_custom_characters
|
288
|
+
@custom_characters = []
|
289
|
+
8.times do |i| #8 custom variables
|
290
|
+
@custom_characters << TextLCDCustomCharacter.new(@handle, i)
|
291
|
+
end
|
292
|
+
end
|
293
|
+
|
294
|
+
def remove_specific_event_handlers
|
295
|
+
end
|
296
|
+
end
|
297
|
+
|
298
|
+
end
|