phidgets4r 0.0.2

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.
@@ -0,0 +1,409 @@
1
+
2
+ require 'dl'
3
+ require 'rbconfig'
4
+
5
+ module Phidgets
6
+
7
+ NOTATTACHED = 0
8
+ ATTACHED = 1
9
+
10
+ CLASS_NOTHING = 1
11
+ CLASS_ACCELEROMETER = 2
12
+ CLASS_ADVANCEDSERVO = 3
13
+ CLASS_ENCODER = 4
14
+ CLASS_GPS = 5
15
+ CLASS_GYROSCOPE = 6
16
+ CLASS_INTERFACEKIT = 7
17
+ CLASS_LED = 8
18
+ CLASS_MOTORCONTROL = 9
19
+ CLASS_PHSENSOR = 10
20
+ CLASS_RFID = 11
21
+ CLASS_SERVO = 12
22
+ CLASS_STEPPER = 13
23
+ CLASS_TEMPERATURESENSOR = 14
24
+ CLASS_TEXTLCD = 15
25
+ CLASS_TEXTLED = 16
26
+ CLASS_WEIGHTSENSOR = 17
27
+
28
+ ID_ACCELEROMETER_2AXIS = 0x071
29
+ ID_ACCELEROMETER_3AXIS = 0x07E
30
+ ID_ADVANCEDSERVO_8MOTOR = 0x03A
31
+ ID_BIPOLAR_STEPPER_1MOTOR = 0x07B
32
+ ID_ENCODER_1ENCODER_1INPUT = 0x04B
33
+ ID_ENCODER_HS_1ENCODER = 0x080
34
+ ID_INTERFACEKIT_0_0_4 = 0x040
35
+ ID_INTERFACEKIT_0_0_8 = 0x081
36
+ ID_INTERFACEKIT_0_16_16 = 0x044
37
+ ID_INTERFACEKIT_8_8_8 = 0x045
38
+ ID_INTERFACEKIT_8_8_8_w_LCD = 0x07D
39
+ ID_LED_64 = 0x04A
40
+ ID_LINEAR_TOUCH = 0x076
41
+ ID_MOTORCONTROL_HC_2MOTOR = 0x059
42
+ ID_MOTORCONTROL_LV_2MOTOR_4INPUT = 0x058
43
+ ID_PHSENSOR = 0x074
44
+ ID_RFID_2OUTPUT = 0x031
45
+ ID_ROTARY_TOUCH = 0x077
46
+ ID_SERVO_1MOTOR = 0x039
47
+ ID_TEMPERATURESENSOR = 0x070
48
+ ID_TEXTLCD_2x20_w_8_8_8 = 0x17D
49
+ ID_UNIPOLAR_STEPPER_4MOTOR = 0x07A
50
+ ID_INTERFACEKIT_0_8_8_w_LCD = 0x053
51
+ ID_INTERFACEKIT_4_8_8 = 0x004
52
+ ID_RFID = 0x030
53
+ ID_SERVO_1MOTOR_OLD = 0x002
54
+ ID_SERVO_4MOTOR = 0x038
55
+ ID_SERVO_4MOTOR_OLD = 0x003
56
+ ID_TEXTLCD_2x20 = 0x052
57
+ ID_TEXTLCD_2x20_w_0_8_8 = 0x153
58
+ ID_TEXTLED_1x8 = 0x049
59
+ ID_TEXTLED_4x8 = 0x048
60
+ ID_WEIGHTSENSOR = 0x072
61
+
62
+ def Phidgets.setLibName(name)
63
+ Common.setLibName(name)
64
+ end
65
+
66
+ class Exception < RuntimeError
67
+ attr_reader :code
68
+
69
+ EPHIDGET_NOTFOUND = 1
70
+ EPHIDGET_NOMEMORY = 2
71
+ EPHIDGET_UNEXPECTED = 3
72
+ EPHIDGET_INVALIDARG = 4
73
+ EPHIDGET_NOTATTACHED = 5
74
+ EPHIDGET_INTERRUPTED = 6
75
+ EPHIDGET_INVALID = 7
76
+ EPHIDGET_NETWORK = 8
77
+ EPHIDGET_UNKNOWNVAL = 9
78
+ EPHIDGET_BADPASSWORD = 10
79
+ EPHIDGET_UNSUPPORTED = 11
80
+ EPHIDGET_DUPLICATE = 12
81
+ EPHIDGET_TIMEOUT = 13
82
+ EPHIDGET_OUTOFBOUNDS = 14
83
+ EPHIDGET_EVENT = 15
84
+ EPHIDGET_NETWORK_NOTCONNECTED = 16
85
+ EPHIDGET_WRONGDEVICE = 17
86
+ EPHIDGET_CLOSED = 18
87
+ EPHIDGET_BADVERSION = 19
88
+
89
+ def initialize(code)
90
+ @code = code
91
+ case code
92
+ when -2
93
+ super('Failed to load Phidgets Library')
94
+ when -1
95
+ super('Unable to determine Phidgets Library name.')
96
+ when EPHIDGET_NOTFOUND
97
+ super('A Phidget matching the type and or serial number could not be found.')
98
+ when EPHIDGET_NOMEMORY
99
+ super('Memory could not be allocated.')
100
+ when EPHIDGET_UNEXPECTED
101
+ super('Unexpected Error. Contact Phidgets Inc. for support.')
102
+ when EPHIDGET_INVALIDARG
103
+ super('Invalid argument passed to function.')
104
+ when EPHIDGET_NOTATTACHED
105
+ super('Phidget not physically attached.')
106
+ when EPHIDGET_INTERRUPTED
107
+ super('Read/Write operation was interrupted.')
108
+ when EPHIDGET_INVALID
109
+ super('The Error Code is not defined.')
110
+ when EPHIDGET_NETWORK
111
+ super('Network Error.')
112
+ when EPHIDGET_UNKNOWNVAL
113
+ super('Value is Unknown (State not yet received from device, or not yet set by user).')
114
+ when EPHIDGET_BADPASSWORD
115
+ super('Authorization Failed.')
116
+ when EPHIDGET_UNSUPPORTED
117
+ super('Not Supported.')
118
+ when EPHIDGET_DUPLICATE
119
+ super('Duplicated request.')
120
+ when EPHIDGET_TIMEOUT
121
+ super('Given timeout has been exceeded.')
122
+ when EPHIDGET_OUTOFBOUNDS
123
+ super('Index out of Bounds.')
124
+ when EPHIDGET_EVENT
125
+ super('A non-null error code was returned from an event handler.')
126
+ when EPHIDGET_NETWORK_NOTCONNECTED
127
+ super('A connection to the server does not exist.')
128
+ when EPHIDGET_WRONGDEVICE
129
+ super('Function is not applicable for this device.')
130
+ when EPHIDGET_CLOSED
131
+ super('Phidget handle was closed.')
132
+ when EPHIDGET_BADVERSION
133
+ super('Webservice and Client protocol versions don’t match. Update to newest release.')
134
+ end
135
+ end
136
+
137
+ end
138
+
139
+ class Common
140
+ @@libname = nil
141
+ @@lib = nil
142
+ @@open_remote = nil
143
+ @@open_remote_ip = nil
144
+ @@open = nil
145
+ @@close = nil
146
+ @@delete = nil
147
+ @@detach_handler = nil
148
+ @@attach_handler = nil
149
+ @@connect_handler = nil
150
+ @@disconnect_handler = nil
151
+ @@error_handler = nil
152
+ @@name = nil
153
+ @@serial = nil
154
+ @@version = nil
155
+ @@status = nil
156
+ @@lib_version = nil
157
+ @@type = nil
158
+ @@get_label = nil
159
+ @@set_label = nil
160
+ @@error_description = nil
161
+ @@wait = nil
162
+ @@server_id = nil
163
+ @@server_addr = nil
164
+ @@server_status = nil
165
+ @@device_id = nil
166
+ @@device_class = nil
167
+
168
+ def initialize
169
+ if @@libname == nil
170
+ case Config::CONFIG['target_os']
171
+ when 'linux'
172
+ @@libname = 'libphidget21.so'
173
+ when 'mswin32'
174
+ @@libname = 'phidget21.dll'
175
+ when 'darwin10.2.0'
176
+ @@libname = '/Library/Frameworks/Phidget21.framework/Versions/Current/Phidget21'
177
+ when 'darwin10.3.0'
178
+ @@libname = '/Library/Frameworks/Phidget21.framework/Versions/Current/Phidget21'
179
+ else
180
+ raise Phidgets::Exception.new(-1)
181
+ end
182
+ end
183
+
184
+ begin
185
+ @@lib = DL.dlopen(@@libname)
186
+ rescue
187
+ raise Phidgets::Exception.new(-2)
188
+ end
189
+
190
+ @handle = DL.malloc(DL.sizeof('P'))
191
+
192
+ end
193
+
194
+ private
195
+
196
+ def sym(name, interface)
197
+ @@lib[name, interface]
198
+ end
199
+
200
+ def call_IX(sym_name, func_name, format, arg1)
201
+ sym_name = sym(func_name, format) if sym_name == nil
202
+ r,rs = sym_name.call(arg1)
203
+ raise Phidgets::Exception.new(r) if r != 0
204
+ end
205
+
206
+ def call_IXX(sym_name, func_name, format, arg1, arg2)
207
+ sym_name = sym(func_name, format) if sym_name == nil
208
+ r,rs = sym_name.call(arg1, arg2)
209
+ raise Phidgets::Exception.new(r) if r != 0
210
+ end
211
+
212
+ def call_IXXX(sym_name, func_name, format, arg1, arg2, arg3)
213
+ puts "in call_IXXX format: #{format}"
214
+ sym_name = sym(func_name, format) if sym_name == nil
215
+ r,rs = sym_name.call(arg1, arg2, arg3)
216
+ puts "r: #{r} - rs: #{rs[2]}"
217
+ raise Phidgets::Exception.new(r) if r != 0
218
+ end
219
+
220
+ def call_IXXXX(sym_name, func_name, format, arg1, arg2, arg3, arg4)
221
+ sym_name = sym(func_name, format) if sym_name == nil
222
+ r,rs = sym_name.call(arg1, arg2, arg3, arg4)
223
+ raise Phidgets::Exception.new(r) if r != 0
224
+ end
225
+
226
+ def call_IXXXXX(sym_name, func_name, format, arg1, arg2, arg3, arg4, arg5)
227
+ sym_name = sym(func_name, format) if sym_name == nil
228
+ r,rs = sym_name.call(arg1, arg2, arg3, arg4, arg5)
229
+ raise Phidgets::Exception.new(r) if r != 0
230
+ end
231
+
232
+ def call_IPi(sym_name, func_name, arg1)
233
+ sym_name = sym(func_name, 'IPi') if sym_name == nil
234
+ return_arg = 0
235
+ r,rs = sym_name.call(arg1, return_arg)
236
+ raise Phidgets::Exception.new(r) if r != 0
237
+ rs[1]
238
+ end
239
+
240
+ def call_IPIi(sym_name, func_name, arg1, arg2)
241
+ sym_name = sym(func_name, 'IPIi') if sym_name == nil
242
+ return_arg = 0
243
+ r,rs = sym_name.call(arg1, arg2, return_arg)
244
+ raise Phidgets::Exception.new(r) if r != 0
245
+ rs[2]
246
+ end
247
+
248
+ def call_IPId(sym_name, func_name, arg1, arg2)
249
+ sym_name = sym(func_name, 'IPId') if sym_name == nil
250
+ return_arg = 0.0
251
+ r,rs = sym_name.call(arg1, arg2, return_arg)
252
+ raise Phidgets::Exception.new(r) if r != 0.0
253
+ rs[2]
254
+ end
255
+
256
+ def call_IPs(sym_name, func_name, arg1)
257
+ sym_name = sym(func_name, 'IPp') if sym_name == nil
258
+ arg_ptr = DL.malloc(DL.sizeof('P'))
259
+ r,rs = sym_name.call(arg1, arg_ptr.ref)
260
+ raise Phidgets::Exception.new(r) if r != 0
261
+ arg_ptr.free = nil
262
+ arg_ptr.to_s
263
+ end
264
+
265
+ def createCallback(callback)
266
+ DL.callback('IPP') {|handle,data|
267
+ data = ObjectSpace._id2ref(data.to_i)
268
+ eval("#{callback}(data)")
269
+ }
270
+ end
271
+
272
+ def createErrorCallback(callback)
273
+ DL.callback('IPPIS') {|handle,data,error_code,error_string|
274
+ data = ObjectSpace._id2ref(data.to_i)
275
+ eval("#{callback}(data,error_code,error_string)")
276
+ }
277
+ end
278
+
279
+ public
280
+
281
+ def Common.setLibName(name)
282
+ @@libname = name
283
+ end
284
+
285
+ def openRemote(serial_number=-1, server=nil, password=nil, timeout=0)
286
+ call_IXXXX(@@open_remote, 'CPhidget_openRemote', 'IPISS', @handle, serial_number, server, password)
287
+ waitForAttachment(timeout) if timeout > 0
288
+ end
289
+
290
+ def openRemoteIP(serial_number, address, port=5001, password=nil, timeout=0)
291
+ call_IXXXXX(@@open_remote_ip, 'CPhidget_openRemoteIP', 'IPISIS', @handle, serial_number, address, port, password)
292
+ waitForAttachment(timeout) if timeout > 0
293
+ end
294
+
295
+ def open(serial_number=-1, timeout=0)
296
+ call_IXX(@@open, 'CPhidget_open', 'IPI', @handle, serial_number)
297
+ waitForAttachment(timeout) if timeout > 0
298
+ end
299
+
300
+ def close
301
+ call_IX(@@close, 'CPhidget_close', 'IP', @handle)
302
+ end
303
+
304
+ def delete
305
+ @handle.free = nil
306
+ call_IX(@@delete, 'CPhidget_delete', 'IP', @handle)
307
+ end
308
+
309
+ def setOnDetachHandler(callback, data)
310
+ call_IXXX(@@detach_handler, 'CPhidget_set_OnDetach_Handler', 'IPPP', @handle, createCallback(callback), DL::PtrData.new(data.object_id))
311
+ end
312
+
313
+ def setOnAttachHandler(callback, data)
314
+ call_IXXX(@@attach_handler, 'CPhidget_set_OnAttach_Handler', 'IPPP', @handle, createCallback(callback), DL::PtrData.new(data.object_id))
315
+ end
316
+
317
+ def setOnConnectHandler(callback, data)
318
+ call_IXXX(@@connect_handler, 'CPhidget_set_OnServerConnect_Handler', 'IPPP', @handle, createCallback(callback), DL::PtrData.new(data.object_id))
319
+ end
320
+
321
+ def setOnDisconnectHandler(callback, data)
322
+ call_IXXX(@@disconnect_handler, 'CPhidget_set_OnServerDisconnect_Handler', 'IPPP', @handle, createCallback(callback), DL::PtrData.new(data.object_id))
323
+ end
324
+
325
+ def setOnErrorHandler(callback, data)
326
+ call_IXXX(@@error_handler, 'CPhidget_set_OnError_Handler', 'IPPP', @handle, createErrorCallback(callback), DL::PtrData.new(data.object_id))
327
+ end
328
+
329
+ def getDeviceName
330
+ call_IPs(@@name, 'CPhidget_getDeviceName', @handle)
331
+ end
332
+
333
+ def getSerialNumber
334
+ call_IPi(@@serial, 'CPhidget_getSerialNumber', @handle)
335
+ end
336
+
337
+ def getDeviceVersion
338
+ call_IPi(@@version, 'CPhidget_getDeviceVersion', @handle)
339
+ end
340
+
341
+ def getDeviceStatus
342
+ call_IPi(@@status, 'CPhidget_getDeviceStatus', @handle)
343
+ end
344
+
345
+ def getLibraryVersion
346
+ @@lib_version = sym('CPhidget_getLibraryVersion', 'Ip') if @@lib_version == nil
347
+ lib_version_ptr = DL.malloc(DL.sizeof('P'))
348
+ r,rs = @@lib_version.call(lib_version_ptr.ref)
349
+ raise Phidgets::Exception.new(r) if r != 0
350
+ lib_version_ptr.free = nil
351
+ lib_version_ptr.to_s
352
+ end
353
+
354
+ def getDeviceType
355
+ call_IPs(@@type, 'CPhidget_getDeviceType', @handle)
356
+ end
357
+
358
+ def getDeviceLabel
359
+ call_IPs(@@get_label, 'CPhidget_getDeviceLabel', @handle)
360
+ end
361
+
362
+ def setDeviceLabel(label)
363
+ call_IXX(@@set_label, 'CPhidget_setDeviceLabel', 'IPS', @handle, label)
364
+ end
365
+
366
+ def getErrorDescription(error_code)
367
+ @@error_description = sym('CPhidget_getErrorDescription', 'IIp') if @@error_description == nil
368
+ error_description_ptr = DL.malloc(DL.sizeof('P'))
369
+ r,rs = @@error_description.call(error_code, error_description_ptr.ref)
370
+ raise Phidgets::Exception.new(r) if r != 0
371
+ error_description_ptr.free = nil
372
+ error_description_ptr.to_s
373
+ end
374
+
375
+ def waitForAttachment(timeout)
376
+ call_IXX(@@wait, 'CPhidget_waitForAttachment', 'IPI', @handle, timeout)
377
+ end
378
+
379
+ def getServerID
380
+ call_IPs(@@server_id, 'CPhidget_getServerID', @handle)
381
+ end
382
+
383
+ def getServerAddress
384
+ @@server_addr = sym('CPhidget_getServerAddress', 'IPpi') if @@server_addr == nil
385
+ server_addr_ptr = DL.malloc(DL.sizeof('P'))
386
+ server_port = 0
387
+ r,rs = @@server_addr.call(@handle, server_addr_ptr.ref, server_port)
388
+ raise Phidgets::Exception.new(r) if r != 0
389
+ server_addr_ptr.free = nil
390
+ a = [server_addr_ptr.to_s, rs[2]]
391
+ a
392
+ end
393
+
394
+ def getServerStatus
395
+ call_IPi(@@server_status, 'CPhidget_getServerStatus', @handle)
396
+ end
397
+
398
+ def getDeviceID
399
+ call_IPi(@@device_id, 'CPhidget_getDeviceID', @handle)
400
+ end
401
+
402
+ def getDeviceClass
403
+ call_IPi(@@device_class, 'CPhidget_getDeviceClass', @handle)
404
+ end
405
+
406
+ end
407
+
408
+ end
409
+
@@ -0,0 +1,78 @@
1
+
2
+ #require 'phidgets/common'
3
+
4
+ module Phidgets
5
+
6
+ class InterfaceKit < Common
7
+ @@create = nil
8
+ @@input_count = nil
9
+ @@input_state = nil
10
+ @@output_count = nil
11
+ @@get_output_state = nil
12
+ @@set_output_state = nil
13
+ @@sensor_count = nil
14
+ @@sensor_value = nil
15
+ @@sensor_raw_value = nil
16
+ @@get_ratiometric = nil
17
+ @@set_ratiometric = nil
18
+
19
+ def initialize(serial_number=-1, timeout=0)
20
+ super()
21
+ create
22
+ open(serial_number, timeout) if timeout > 0
23
+ end
24
+
25
+ private
26
+
27
+ def create
28
+ @@create = sym('CPhidgetInterfaceKit_create', 'Ip') if @@create == nil
29
+ r,rs = @@create.call(@handle.ref)
30
+ raise Phidgets::Exception.new(r) if r != 0
31
+ end
32
+
33
+ public
34
+
35
+ def getInputCount
36
+ call_IPi(@@input_count, 'CPhidgetInterfaceKit_getInputCount', @handle)
37
+ end
38
+
39
+ def getInputState(index)
40
+ call_IPIi(@@input_state, 'CPhidgetInterfaceKit_getInputState', @handle, index)
41
+ end
42
+
43
+ def getOutputCount
44
+ call_IPi(@@output_count, 'CPhidgetInterfaceKit_getOutputCount', @handle)
45
+ end
46
+
47
+ def getOutputState(index)
48
+ call_IPIi(@@get_output_state, 'CPhidgetInterfaceKit_getOutputState', @handle, index)
49
+ end
50
+
51
+ def setOutputState(index, state)
52
+ call_IXXX(@@set_output_state, 'CPhidgetInterfaceKit_setOutputState', 'IPII', @handle, index, state)
53
+ end
54
+
55
+ def getSensorCount
56
+ call_IPi(@@sensor_count, 'CPhidgetInterfaceKit_getSensorCount', @handle)
57
+ end
58
+
59
+ def getSensorValue(index)
60
+ call_IPIi(@@sensor_value, 'CPhidgetInterfaceKit_getSensorValue', @handle, index)
61
+ end
62
+
63
+ def getSensorRawValue(index)
64
+ call_IPIi(@@sensor_raw_value, 'CPhidgetInterfaceKit_getSensorRawValue', @handle, index)
65
+ end
66
+
67
+ def getRatiometric
68
+ call_IPi(@@get_ratiometric, 'CPhidgetInterfaceKit_getRatiometric', @handle)
69
+ end
70
+
71
+ def setRatiometric(ratiometric)
72
+ call_IXX(@@set_ratiometric, 'CPhidgetInterfaceKit_setRatiometric', 'IPI', @handle, ratiometric)
73
+ end
74
+
75
+ end
76
+
77
+ end
78
+
@@ -0,0 +1,83 @@
1
+
2
+ #require 'phidgets/common'
3
+
4
+ module Phidgets
5
+
6
+ class RFID < Common
7
+ @@create = nil
8
+ @@output_count = nil
9
+ @@get_output_state = nil
10
+ @@set_output_state = nil
11
+ @@get_antenna_on = nil
12
+ @@set_antenna_on = nil
13
+ @@get_led_on = nil
14
+ @@set_led_on = nil
15
+ @@get_last_tag = nil
16
+ @@get_tag_status = nil
17
+ @@on_tag_handler = nil
18
+ @@tag_lost_handler = nil
19
+
20
+ def initialize(serial_number=-1, timeout=0)
21
+ super()
22
+ create
23
+ open(serial_number, timeout) if timeout > 0
24
+ end
25
+
26
+ private
27
+
28
+ def create
29
+ @@create = sym('CPhidgetRFID_create', 'Ip') if @@create == nil
30
+ r,rs = @@create.call(@handle.ref)
31
+ raise Phidgets::Exception.new(r) if r != 0
32
+ end
33
+
34
+ public
35
+
36
+ def getOutputCount
37
+ call_IPi(@@output_count, 'CPhidgetRFID_getOutputCount', @handle)
38
+ end
39
+
40
+ def getOutputState(index)
41
+ call_IPIi(@@get_output_state, 'CPhidgetRFID_getOutputState', @handle, index)
42
+ end
43
+
44
+ def setOutputState(index, state)
45
+ call_IXXX(@@set_output_state, 'CPhidgetRFID_setOutputState', 'IPII', @handle, index, state)
46
+ end
47
+
48
+ def getAntennaOn
49
+ call_IPi(@@get_antenna_on, 'CPhidgetRFID_getAntennaOn', @handle)
50
+ end
51
+
52
+ def setAntennaOn(state)
53
+ call_IPX(@@set_antenna_on, 'CPhidgetRFID_setAntennaOn', 'IPI', @handle, state)
54
+ end
55
+
56
+ def getLedOn
57
+ call_IPi(@@get_led_on, 'CPhidgetRFID_getLEDOn', @handle)
58
+ end
59
+
60
+ def setLedOn(state)
61
+ call_IPX(@@set_led_on, 'CPhidgetRFID_setLEDOn', 'IPI', @handle, state)
62
+ end
63
+
64
+ def getLastTag
65
+ call_IPs(@@get_last_tag, 'CPhidgetRFID_getLastTag', @handle)
66
+ end
67
+
68
+ def getTagStatus
69
+ call_IPi(@@get_tag_status, 'CPhidgetRFID_getTagStatus', @handle)
70
+ end
71
+
72
+ def setOnTagHandler(callback, data)
73
+ call_IXXX(@@on_tag_handler, 'CPhidgetRFID_set_OnTag_Handler', 'IPPP', @handle, createCallback(callback), DL::PtrData.new(data.object_id))
74
+ end
75
+
76
+ def setOnTagLostHandler(callback, data)
77
+ call_IXXX(@@tag_lost_handler, 'CPhidgetRFID_set_OnTagLost_Handler', 'IPPP', @handle, createCallback(callback), DL::PtrData.new(data.object_id))
78
+ end
79
+
80
+ end
81
+
82
+ end
83
+
@@ -0,0 +1,64 @@
1
+
2
+ #require 'phidgets/common'
3
+
4
+ module Phidgets
5
+
6
+ class Servo < Common
7
+ @@create = nil
8
+ @@get_motor_count = nil
9
+ @@get_position = nil
10
+ @@set_position = nil
11
+ @@get_position_max = nil
12
+ @@get_position_min = nil
13
+ @@get_servo_type = nil
14
+ @@set_servo_type = nil
15
+ @@get_engaged = nil
16
+ @@set_engaged = nil
17
+ def initialize(serial_number=-1, timeout=0)
18
+ super()
19
+ create
20
+ open(serial_number, timeout) if timeout > 0
21
+ end
22
+
23
+ private
24
+
25
+ def create
26
+ @@create = sym('CPhidgetServo_create', 'Ip') if @@create == nil
27
+ r,rs = @@create.call(@handle.ref)
28
+ raise Phidgets::Exception.new(r) if r != 0
29
+ end
30
+
31
+ public
32
+
33
+ def getMotorCount
34
+ call_IPi(@@get_motor_count, 'CPhidgetServo_getMotorCount', @handle)
35
+ end
36
+
37
+ def getPosition(index)
38
+ call_IPId(@@get_position, 'CPhidgetServo_getPosition', @handle, index)
39
+ end
40
+
41
+ def setPosition(index, position)
42
+ puts "calling call_IXXX"
43
+ call_IXXX(@@set_position, 'CPhidgetServo_setPosition', 'IPII', @handle, index, position)
44
+ end
45
+
46
+ def getPositionMax(index)
47
+ call_IPId(@@get_position_max, 'CPhidgetServo_getPositionMax', @handle, index)
48
+ end
49
+
50
+ def getPositionMin(index)
51
+ call_IPId(@@get_position_min, 'CPhidgetServo_getPositionMin', @handle, index)
52
+ end
53
+
54
+ def getEngaged(index)
55
+ call_IPIi(@@get_engaged, 'CPhidgetServo_getEngaged', @handle, index)
56
+ end
57
+
58
+ def setEngaged(index, state)
59
+ call_IXXX(@@set_engaged, 'CPhidgetServo_setEngaged', 'IPII', @handle, index, state)
60
+ end
61
+
62
+ end
63
+
64
+ end
data/lib/phidgets.rb ADDED
@@ -0,0 +1,11 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ require File.dirname(__FILE__) + '/phidgets/common.rb'
5
+ require File.dirname(__FILE__) + '/phidgets/interfacekit.rb'
6
+ require File.dirname(__FILE__) + '/phidgets/rfid.rb'
7
+ require File.dirname(__FILE__) + '/phidgets/servo.rb'
8
+
9
+ module Phidgets
10
+ VERSION = '0.0.2'
11
+ end
@@ -0,0 +1,3 @@
1
+ require 'stringio'
2
+ require 'test/unit'
3
+ require File.dirname(__FILE__) + '/../lib/phidgets'