RbGps 0.2 → 0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/RbGps.so +0 -0
- data/rb_gps.c +94 -9
- data/test.rb +11 -3
- metadata +3 -2
data/RbGps.so
ADDED
Binary file
|
data/rb_gps.c
CHANGED
@@ -1,10 +1,9 @@
|
|
1
1
|
|
2
|
-
|
3
|
-
#include <ruby.h>
|
4
|
-
#include <errno.h>
|
5
2
|
#include "version.h"
|
6
|
-
#include
|
7
|
-
|
3
|
+
#include <errno.h>
|
4
|
+
#include <gps.h>
|
5
|
+
#include <math.h>
|
6
|
+
#include <ruby.h>
|
8
7
|
#include <stdio.h>
|
9
8
|
|
10
9
|
/* classes */
|
@@ -37,10 +36,25 @@ struct _symbols {
|
|
37
36
|
VALUE fix_climb;
|
38
37
|
|
39
38
|
VALUE sat_prn;
|
39
|
+
|
40
40
|
VALUE sat_elevation;
|
41
41
|
VALUE sat_azimuth;
|
42
42
|
VALUE sat_ss;
|
43
43
|
VALUE sat_used;
|
44
|
+
|
45
|
+
VALUE prec_time;
|
46
|
+
VALUE prec_horiz;
|
47
|
+
VALUE prec_spheric;
|
48
|
+
VALUE prec_speed;
|
49
|
+
VALUE prec_vert;
|
50
|
+
VALUE prec_climb;
|
51
|
+
VALUE prec_sat_used;
|
52
|
+
VALUE prec_sat_visible;
|
53
|
+
VALUE prec_pdop;
|
54
|
+
VALUE prec_hdop;
|
55
|
+
VALUE prec_vdop;
|
56
|
+
VALUE prec_tdop;
|
57
|
+
VALUE prec_gdop;
|
44
58
|
};
|
45
59
|
|
46
60
|
static struct _symbols symbolTable;
|
@@ -149,9 +163,11 @@ static VALUE rbGps_get_fix(VALUE self) {
|
|
149
163
|
if (!fix)
|
150
164
|
return Qnil;
|
151
165
|
VALUE ret=rb_hash_new();
|
152
|
-
|
153
|
-
|
154
|
-
|
166
|
+
if (isnan(fix->time)) {
|
167
|
+
rb_hash_aset(ret,symbolTable.fix_time,Qnil);
|
168
|
+
} else {
|
169
|
+
rb_hash_aset(ret,symbolTable.fix_time,rb_float_new(fix->time));
|
170
|
+
}
|
155
171
|
if (fix->mode==MODE_NO_FIX) {
|
156
172
|
rb_hash_aset(ret,symbolTable.fix_mode,symbolTable.mode_no_fix);
|
157
173
|
} else if (fix->mode==MODE_2D) {
|
@@ -207,6 +223,58 @@ static VALUE rbGps_get_sat(VALUE self) {
|
|
207
223
|
return ret;
|
208
224
|
}
|
209
225
|
|
226
|
+
|
227
|
+
|
228
|
+
static VALUE rbGps_get_prec(VALUE self) {
|
229
|
+
rb_Gps_cls *obj=0;
|
230
|
+
Data_Get_Struct(self, rb_Gps_cls, obj);
|
231
|
+
if (!obj->gps_data)
|
232
|
+
return Qnil;
|
233
|
+
const struct gps_data_t *gps_data=obj->gps_data;
|
234
|
+
const struct gps_fix_t *fix=&(gps_data->fix);
|
235
|
+
if (!fix)
|
236
|
+
return Qnil;
|
237
|
+
VALUE ret=rb_hash_new();
|
238
|
+
|
239
|
+
rb_hash_aset(ret,symbolTable.prec_time,rb_float_new(fix->ept));
|
240
|
+
|
241
|
+
if (fix->mode==MODE_2D || fix->mode==MODE_3D) {
|
242
|
+
rb_hash_aset(ret,symbolTable.prec_horiz,rb_float_new(fix->eph));
|
243
|
+
rb_hash_aset(ret,symbolTable.prec_spheric,rb_float_new(gps_data->epe));
|
244
|
+
rb_hash_aset(ret,symbolTable.prec_speed,rb_float_new(fix->eps));
|
245
|
+
} else {
|
246
|
+
rb_hash_aset(ret,symbolTable.prec_horiz,Qnil);
|
247
|
+
rb_hash_aset(ret,symbolTable.prec_spheric,Qnil);
|
248
|
+
rb_hash_aset(ret,symbolTable.prec_speed,Qnil);
|
249
|
+
}
|
250
|
+
|
251
|
+
if (fix->mode==MODE_3D) {
|
252
|
+
rb_hash_aset(ret,symbolTable.prec_vert,rb_float_new(fix->epv));
|
253
|
+
rb_hash_aset(ret,symbolTable.prec_climb,rb_float_new(fix->epc));
|
254
|
+
} else {
|
255
|
+
rb_hash_aset(ret,symbolTable.prec_vert,Qnil);
|
256
|
+
rb_hash_aset(ret,symbolTable.prec_climb,Qnil);
|
257
|
+
}
|
258
|
+
rb_hash_aset(ret,symbolTable.prec_sat_used,INT2NUM(gps_data->satellites_used));
|
259
|
+
rb_hash_aset(ret,symbolTable.prec_sat_visible,INT2NUM(gps_data->satellites));
|
260
|
+
|
261
|
+
rb_hash_aset(ret,symbolTable.prec_pdop,rb_float_new(gps_data->pdop));
|
262
|
+
rb_hash_aset(ret,symbolTable.prec_hdop,rb_float_new(gps_data->hdop));
|
263
|
+
rb_hash_aset(ret,symbolTable.prec_vdop,rb_float_new(gps_data->vdop));
|
264
|
+
rb_hash_aset(ret,symbolTable.prec_tdop,rb_float_new(gps_data->tdop));
|
265
|
+
rb_hash_aset(ret,symbolTable.prec_gdop,rb_float_new(gps_data->gdop));
|
266
|
+
|
267
|
+
|
268
|
+
return ret;
|
269
|
+
}
|
270
|
+
|
271
|
+
|
272
|
+
|
273
|
+
|
274
|
+
|
275
|
+
|
276
|
+
|
277
|
+
|
210
278
|
static void fill_symbol_table() {
|
211
279
|
symbolTable.online=ID2SYM(rb_intern("online"));
|
212
280
|
|
@@ -236,6 +304,22 @@ static void fill_symbol_table() {
|
|
236
304
|
symbolTable.sat_ss=ID2SYM(rb_intern("ss"));
|
237
305
|
symbolTable.sat_used=ID2SYM(rb_intern("used"));
|
238
306
|
|
307
|
+
symbolTable.prec_time=ID2SYM(rb_intern("prec_time"));
|
308
|
+
symbolTable.prec_horiz=ID2SYM(rb_intern("prec_horizontal"));
|
309
|
+
symbolTable.prec_spheric=ID2SYM(rb_intern("prec_spherical"));
|
310
|
+
symbolTable.prec_speed=ID2SYM(rb_intern("prec_speed"));
|
311
|
+
symbolTable.prec_vert=ID2SYM(rb_intern("prec_vertical"));
|
312
|
+
symbolTable.prec_climb=ID2SYM(rb_intern("prec_climb"));
|
313
|
+
|
314
|
+
symbolTable.prec_sat_used=ID2SYM(rb_intern("prec_sat_used"));
|
315
|
+
symbolTable.prec_sat_visible=ID2SYM(rb_intern("prec_sat_visible"));
|
316
|
+
|
317
|
+
symbolTable.prec_pdop=ID2SYM(rb_intern("prec_pdop"));
|
318
|
+
symbolTable.prec_hdop=ID2SYM(rb_intern("prec_hdop"));
|
319
|
+
symbolTable.prec_vdop=ID2SYM(rb_intern("prec_vdop"));
|
320
|
+
symbolTable.prec_tdop=ID2SYM(rb_intern("prec_tdop"));
|
321
|
+
symbolTable.prec_gdop=ID2SYM(rb_intern("prec_gdop"));
|
322
|
+
|
239
323
|
|
240
324
|
}
|
241
325
|
|
@@ -251,7 +335,8 @@ void Init_RbGps() {
|
|
251
335
|
rb_define_method(cRbGps, "poll" , rbGps_poll , 0);
|
252
336
|
rb_define_method(cRbGps, "get" , rbGps_get , 0);
|
253
337
|
rb_define_method(cRbGps, "get_fix" , rbGps_get_fix , 0);
|
254
|
-
rb_define_method(cRbGps, "get_sat" , rbGps_get_sat , 0);
|
338
|
+
rb_define_method(cRbGps, "get_sat" , rbGps_get_sat , 0);
|
339
|
+
rb_define_method(cRbGps, "get_prec" , rbGps_get_prec , 0);
|
255
340
|
rb_define_method(cRbGps, "query" , rbGps_query , 1);
|
256
341
|
|
257
342
|
}
|
data/test.rb
CHANGED
@@ -5,16 +5,22 @@ def dump_sats(sats)
|
|
5
5
|
count=0
|
6
6
|
sats.each do |sat|
|
7
7
|
count=count+1
|
8
|
-
line=sat.keys.collect { |key| "#{key} #{sat[key]}" }
|
9
|
-
puts "#{count} "+line.join(' ')
|
8
|
+
line=sat.keys.collect { |key| "#{key} #{sprintf("%-5s",sat[key])}" }
|
9
|
+
puts "#{sprintf("%2i ",count)} "+line.join(' ')
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
13
|
def dump_fix(fix)
|
14
|
+
fix[:time]=Time::at(fix[:time]) unless fix[:time].nil?
|
14
15
|
line=fix.keys.collect { |key| "#{key} #{fix[key]}" }
|
15
16
|
puts line.join(' ')
|
16
17
|
end
|
17
18
|
|
19
|
+
def dump_prec(fix)
|
20
|
+
line=fix.keys.collect { |key| "#{key.to_s.gsub(/^prec_/,'')} #{fix[key]}" }
|
21
|
+
puts "prec "+line.join(' ')
|
22
|
+
end
|
23
|
+
|
18
24
|
|
19
25
|
gps=RbGps.new('localhost','2947')
|
20
26
|
|
@@ -29,7 +35,9 @@ loop do
|
|
29
35
|
res=gps.get
|
30
36
|
puts res.to_yaml
|
31
37
|
dump_fix(gps.get_fix)
|
32
|
-
|
38
|
+
dump_prec(gps.get_prec)
|
33
39
|
dump_sats(gps.get_sat)
|
40
|
+
puts "next"
|
41
|
+
|
34
42
|
sleep 1
|
35
43
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: RbGps
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: "0.
|
4
|
+
version: "0.3"
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jurgen Van Ham
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-03-08 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -25,6 +25,7 @@ files:
|
|
25
25
|
- ./rb_gps.c
|
26
26
|
- ./test.rb
|
27
27
|
- ./extconf.rb
|
28
|
+
- ./RbGps.so
|
28
29
|
has_rdoc: false
|
29
30
|
homepage: http://gpsd.berlios.de/
|
30
31
|
post_install_message:
|