rjoystick 0.1 → 0.1.1
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/CHANGELOG +4 -0
- data/Manifest +1 -2
- data/README +16 -4
- data/ext/rjoystick.c +52 -21
- data/rjoystick.gemspec +4 -4
- metadata +24 -28
data/CHANGELOG
CHANGED
data/Manifest
CHANGED
data/README
CHANGED
@@ -1,5 +1,17 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
Now uses rb_thread_blocking_region to read events (not for sixaxis).
|
2
|
+
That way you can read events in another thread without locking up the whole RVM:
|
3
|
+
|
4
|
+
dev = Rjoystick::Device.new '/dev/input/js0'
|
5
|
+
|
6
|
+
Thread.new do
|
7
|
+
dev.event
|
8
|
+
end
|
9
|
+
|
10
|
+
which is useful when you want to build another object that
|
11
|
+
holds the current joystick state to be queried anytime.
|
12
|
+
|
13
|
+
Rjoystick - Ruby c binding to linux/joystick event
|
14
|
+
Copyright (c) 2008 Claudio Fiorini <claudio@cfiorini.it>
|
3
15
|
|
4
16
|
FIRST OF ALL
|
5
17
|
thanks to Ruby core developer, Linux kernel developer and
|
@@ -22,8 +34,8 @@ To install the code just run:
|
|
22
34
|
1st example works ok with all joysticks that are good for linux.
|
23
35
|
2nd example is only for PlayStation 3(copyright Sony) Sixaxis controller
|
24
36
|
because gets 3-Axis accelerometer values and to get it works follow
|
25
|
-
this tutorial first https://help.ubuntu.com/community/Sixaxis and
|
26
|
-
you can use it in BT mode :)
|
37
|
+
this tutorial first https://help.ubuntu.com/community/Sixaxis and
|
38
|
+
you can use it in BT mode :)
|
27
39
|
|
28
40
|
|
29
41
|
Sixaxis has a gyroscope but for now you can't get values from it with
|
data/ext/rjoystick.c
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* Rjoystick - Ruby binding for linux kernel joystick
|
2
|
+
* Rjoystick - Ruby binding for linux kernel joystick
|
3
3
|
* Copyright (C) 2008 Claudio Fiorini <claudio@cfiorini.it>
|
4
4
|
*
|
5
5
|
* This program is free software: you can redistribute it and/or modify
|
@@ -66,15 +66,15 @@ void jssix_free(int* fh)
|
|
66
66
|
VALUE js_dev_init(VALUE klass, VALUE dev_path)
|
67
67
|
{
|
68
68
|
int *fd;
|
69
|
-
|
69
|
+
|
70
70
|
if((fd = malloc(sizeof(int))) != NULL) {
|
71
71
|
if((*fd = open(RSTRING_PTR(dev_path), O_RDONLY)) >= 0) {
|
72
72
|
if(*fd >= MAX_JS)
|
73
73
|
rb_raise(rb_eException, "Error");
|
74
|
-
|
74
|
+
|
75
75
|
return Data_Wrap_Struct(klass, jsdevice_mark, jsdevice_free, fd);
|
76
76
|
}
|
77
|
-
}
|
77
|
+
}
|
78
78
|
return Qnil;
|
79
79
|
}
|
80
80
|
|
@@ -135,27 +135,57 @@ VALUE js_dev_version(VALUE klass)
|
|
135
135
|
if(ioctl(*fd, JSIOCGVERSION, &version) == -1) {
|
136
136
|
rb_raise(rb_eException, "version error");
|
137
137
|
}
|
138
|
-
|
139
|
-
sprintf(js_version, "%d.%d.%d\n",
|
138
|
+
|
139
|
+
sprintf(js_version, "%d.%d.%d\n",
|
140
140
|
version >> 16, (version >> 8) & 0xff, version & 0xff);
|
141
141
|
|
142
142
|
return rb_str_new2(js_version);
|
143
143
|
}
|
144
144
|
|
145
|
+
struct js_dev_blocking_read_param
|
146
|
+
{
|
147
|
+
int fd;
|
148
|
+
struct js_event event;
|
149
|
+
int result;
|
150
|
+
};
|
151
|
+
|
152
|
+
VALUE js_dev_blocking_read( void * param )
|
153
|
+
{
|
154
|
+
struct js_dev_blocking_read_param * jdbrp = (struct js_dev_blocking_read_param*)param;
|
155
|
+
|
156
|
+
jdbrp->result = read( jdbrp->fd, &jdbrp->event, sizeof(struct js_event) );
|
157
|
+
|
158
|
+
return Qnil;
|
159
|
+
}
|
160
|
+
|
145
161
|
VALUE js_dev_event_get(VALUE klass)
|
146
162
|
{
|
147
|
-
int *fd;
|
163
|
+
int * fd;
|
164
|
+
struct js_dev_blocking_read_param jdbrp;
|
165
|
+
|
148
166
|
Data_Get_Struct(klass, int, fd);
|
149
|
-
|
167
|
+
|
168
|
+
jdbrp.fd = *fd;
|
169
|
+
jdbrp.result = 0;
|
170
|
+
|
171
|
+
// kill thread if called, otherwise just return the event or nil
|
172
|
+
rb_thread_blocking_region(js_dev_blocking_read, &jdbrp, RUBY_UBF_IO, NULL);
|
173
|
+
|
174
|
+
if( jdbrp.result > 0)
|
175
|
+
{
|
176
|
+
jse[jdbrp.fd] = jdbrp.event;
|
150
177
|
return Data_Wrap_Struct(rb_cEvent, 0, 0, fd);
|
151
|
-
|
152
|
-
|
178
|
+
}
|
179
|
+
else
|
180
|
+
{
|
181
|
+
return Qnil;
|
182
|
+
}
|
153
183
|
}
|
154
184
|
|
155
185
|
VALUE js_dev_close(VALUE klass)
|
156
186
|
{
|
157
187
|
int *fd;
|
158
|
-
|
188
|
+
|
159
189
|
Data_Get_Struct(klass, int, fd);
|
160
190
|
close(*fd);
|
161
191
|
return Qnil;
|
@@ -179,7 +209,7 @@ VALUE js_event_time(VALUE klass)
|
|
179
209
|
{
|
180
210
|
int *fd;
|
181
211
|
Data_Get_Struct(klass, int, fd);
|
182
|
-
return INT2FIX((fd && *fd >= 0) ? jse[*fd].time :
|
212
|
+
return INT2FIX((fd && *fd >= 0) ? jse[*fd].time : 0);
|
183
213
|
}
|
184
214
|
|
185
215
|
VALUE js_event_value(VALUE klass)
|
@@ -193,12 +223,12 @@ VALUE js_six_init(VALUE klass, VALUE path)
|
|
193
223
|
{
|
194
224
|
int *fh;
|
195
225
|
if((fh = malloc(sizeof(int))) != NULL) {
|
196
|
-
if((*fh = open(RSTRING_PTR(path), O_RDONLY)) >= 0) {
|
226
|
+
if((*fh = open(RSTRING_PTR(path), O_RDONLY)) >= 0) {
|
197
227
|
return Data_Wrap_Struct(klass, jssix_mark, jssix_free, fh);
|
198
228
|
} else
|
199
229
|
rb_raise(rb_eException, "Error opening %s", RSTRING_PTR(path));
|
200
230
|
}
|
201
|
-
return Qnil;
|
231
|
+
return Qnil;
|
202
232
|
}
|
203
233
|
|
204
234
|
VALUE js_six_get_six(VALUE klass)
|
@@ -224,9 +254,9 @@ VALUE js_six_get_six(VALUE klass)
|
|
224
254
|
z = buf[45]<<8 | buf[46];
|
225
255
|
}
|
226
256
|
|
227
|
-
rb_hash_aset(saxis, ID2SYM(rb_intern("x")), INT2FIX(x));
|
228
|
-
rb_hash_aset(saxis, ID2SYM(rb_intern("y")), INT2FIX(y));
|
229
|
-
rb_hash_aset(saxis, ID2SYM(rb_intern("z")), INT2FIX(z));
|
257
|
+
rb_hash_aset(saxis, ID2SYM(rb_intern("x")), INT2FIX(x));
|
258
|
+
rb_hash_aset(saxis, ID2SYM(rb_intern("y")), INT2FIX(y));
|
259
|
+
rb_hash_aset(saxis, ID2SYM(rb_intern("z")), INT2FIX(z));
|
230
260
|
|
231
261
|
return saxis;
|
232
262
|
} else
|
@@ -238,7 +268,7 @@ VALUE js_six_get_six(VALUE klass)
|
|
238
268
|
VALUE js_six_close(VALUE klass)
|
239
269
|
{
|
240
270
|
int *fh;
|
241
|
-
|
271
|
+
|
242
272
|
Data_Get_Struct(klass, int, fh);
|
243
273
|
|
244
274
|
return INT2FIX(close(*fh));
|
@@ -258,17 +288,18 @@ void Init_rjoystick()
|
|
258
288
|
rb_define_method(rb_cDevice, "event", js_dev_event_get, 0);
|
259
289
|
rb_define_method(rb_cDevice, "close", js_dev_close, 0);
|
260
290
|
|
261
|
-
rb_cEvent = rb_define_class_under(rb_mRjoystick, "Event", rb_cObject);
|
291
|
+
rb_cEvent = rb_define_class_under(rb_mRjoystick, "Event", rb_cObject);
|
262
292
|
rb_define_method(rb_cEvent, "time", js_event_time, 0);
|
263
293
|
rb_define_method(rb_cEvent, "value", js_event_value, 0);
|
264
294
|
rb_define_method(rb_cEvent, "number", js_event_number, 0);
|
265
295
|
rb_define_method(rb_cEvent, "type", js_event_type, 0);
|
266
|
-
|
296
|
+
|
267
297
|
rb_cSixaxis = rb_define_class_under(rb_mRjoystick, "SixAxis", rb_cObject);
|
268
298
|
rb_define_singleton_method(rb_cSixaxis, "new", js_six_init, 1);
|
269
|
-
rb_define_method(rb_cSixaxis, "get_sixaxis", js_six_get_six, 0);
|
299
|
+
rb_define_method(rb_cSixaxis, "get_sixaxis", js_six_get_six, 0);
|
270
300
|
rb_define_method(rb_cSixaxis, "close", js_six_close, 0);
|
271
301
|
|
272
302
|
rb_define_const(rb_cEvent, "JSBUTTON", INT2FIX(JS_EVENT_BUTTON));
|
273
303
|
rb_define_const(rb_cEvent, "JSAXIS", INT2FIX(JS_EVENT_AXIS));
|
304
|
+
rb_define_const(rb_cEvent, "JSINIT", INT2FIX(JS_EVENT_INIT));
|
274
305
|
}
|
data/rjoystick.gemspec
CHANGED
@@ -2,17 +2,17 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{rjoystick}
|
5
|
-
s.version = "0.1"
|
5
|
+
s.version = "0.1.1"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
|
-
s.authors = [
|
9
|
-
s.date = %q{
|
8
|
+
s.authors = ['Claudio Fiorini', 'Christian Vervoorts', 'John Anderson']
|
9
|
+
s.date = %q{2012-12-28}
|
10
10
|
s.description = %q{Ruby binding for linux kernel joystick}
|
11
11
|
s.email = %q{claudio.fiorini@gmail.com}
|
12
12
|
s.extensions = [%q{ext/extconf.rb}]
|
13
13
|
s.extra_rdoc_files = [%q{CHANGELOG}, %q{LICENSE}, %q{README}, %q{ext/extconf.rb}, %q{ext/rjoystick.c}]
|
14
14
|
s.files = [%q{CHANGELOG}, %q{LICENSE}, %q{Manifest}, %q{README}, %q{Rakefile}, %q{ext/extconf.rb}, %q{ext/rjoystick.c}, %q{rjoystick.rb}, %q{rjoystick.gemspec}]
|
15
|
-
s.homepage = %q{https://github.com/
|
15
|
+
s.homepage = %q{https://github.com/djellemah/rjoystick}
|
16
16
|
s.rdoc_options = [%q{--line-numbers}, %q{--inline-source}, %q{--title}, %q{Rjoystick}, %q{--main}, %q{README}]
|
17
17
|
s.require_paths = [%q{ext}]
|
18
18
|
s.rubyforge_project = %q{rjoystick}
|
metadata
CHANGED
@@ -1,31 +1,30 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: rjoystick
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
4
5
|
prerelease:
|
5
|
-
version: "0.1"
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Claudio Fiorini
|
9
|
+
- Christian Vervoorts
|
10
|
+
- John Anderson
|
9
11
|
autorequire:
|
10
12
|
bindir: bin
|
11
13
|
cert_chain: []
|
12
|
-
|
13
|
-
date: 2011-07-06 00:00:00 Z
|
14
|
+
date: 2012-12-28 00:00:00.000000000 Z
|
14
15
|
dependencies: []
|
15
|
-
|
16
16
|
description: Ruby binding for linux kernel joystick
|
17
17
|
email: claudio.fiorini@gmail.com
|
18
18
|
executables: []
|
19
|
-
|
20
|
-
extensions:
|
19
|
+
extensions:
|
21
20
|
- ext/extconf.rb
|
22
|
-
extra_rdoc_files:
|
21
|
+
extra_rdoc_files:
|
23
22
|
- CHANGELOG
|
24
23
|
- LICENSE
|
25
24
|
- README
|
26
25
|
- ext/extconf.rb
|
27
26
|
- ext/rjoystick.c
|
28
|
-
files:
|
27
|
+
files:
|
29
28
|
- CHANGELOG
|
30
29
|
- LICENSE
|
31
30
|
- Manifest
|
@@ -35,37 +34,34 @@ files:
|
|
35
34
|
- ext/rjoystick.c
|
36
35
|
- rjoystick.rb
|
37
36
|
- rjoystick.gemspec
|
38
|
-
homepage: https://github.com/
|
37
|
+
homepage: https://github.com/djellemah/rjoystick
|
39
38
|
licenses: []
|
40
|
-
|
41
39
|
post_install_message:
|
42
|
-
rdoc_options:
|
40
|
+
rdoc_options:
|
43
41
|
- --line-numbers
|
44
42
|
- --inline-source
|
45
43
|
- --title
|
46
44
|
- Rjoystick
|
47
45
|
- --main
|
48
46
|
- README
|
49
|
-
require_paths:
|
47
|
+
require_paths:
|
50
48
|
- ext
|
51
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
49
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
52
50
|
none: false
|
53
|
-
requirements:
|
54
|
-
- -
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
version:
|
57
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
58
56
|
none: false
|
59
|
-
requirements:
|
60
|
-
- -
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
version:
|
57
|
+
requirements:
|
58
|
+
- - ! '>='
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '1.2'
|
63
61
|
requirements: []
|
64
|
-
|
65
62
|
rubyforge_project: rjoystick
|
66
|
-
rubygems_version: 1.8.
|
63
|
+
rubygems_version: 1.8.24
|
67
64
|
signing_key:
|
68
65
|
specification_version: 3
|
69
66
|
summary: Ruby binding for linux kernel joystick
|
70
67
|
test_files: []
|
71
|
-
|