RbGps 0.1 → 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.
Files changed (3) hide show
  1. data/rb_gps.c +42 -1
  2. data/test.rb +18 -2
  3. metadata +3 -3
data/rb_gps.c CHANGED
@@ -33,7 +33,14 @@ struct _symbols {
33
33
  VALUE fix_longitude;
34
34
  VALUE fix_altitude;
35
35
  VALUE fix_speed;
36
-
36
+ VALUE fix_heading;
37
+ VALUE fix_climb;
38
+
39
+ VALUE sat_prn;
40
+ VALUE sat_elevation;
41
+ VALUE sat_azimuth;
42
+ VALUE sat_ss;
43
+ VALUE sat_used;
37
44
  };
38
45
 
39
46
  static struct _symbols symbolTable;
@@ -159,15 +166,19 @@ static VALUE rbGps_get_fix(VALUE self) {
159
166
  if (fix->mode==MODE_2D || fix->mode==MODE_3D) {
160
167
  rb_hash_aset(ret,symbolTable.fix_latitude,rb_float_new(fix->latitude));
161
168
  rb_hash_aset(ret,symbolTable.fix_longitude,rb_float_new(fix->longitude));
169
+ rb_hash_aset(ret,symbolTable.fix_heading,rb_float_new(fix->track));
162
170
  } else {
163
171
  rb_hash_aset(ret,symbolTable.fix_latitude,Qnil);
164
172
  rb_hash_aset(ret,symbolTable.fix_longitude,Qnil);
173
+ rb_hash_aset(ret,symbolTable.fix_heading,Qnil);
165
174
  }
166
175
 
167
176
  if (fix->mode==MODE_3D) {
168
177
  rb_hash_aset(ret,symbolTable.fix_altitude,rb_float_new(fix->altitude));
178
+ rb_hash_aset(ret,symbolTable.fix_climb,rb_float_new(fix->climb));
169
179
  } else {
170
180
  rb_hash_aset(ret,symbolTable.fix_altitude,Qnil);
181
+ rb_hash_aset(ret,symbolTable.fix_climb,Qnil);
171
182
  }
172
183
  rb_hash_aset(ret,symbolTable.fix_speed,rb_float_new(fix->speed));
173
184
 
@@ -175,6 +186,26 @@ static VALUE rbGps_get_fix(VALUE self) {
175
186
  }
176
187
 
177
188
 
189
+ static VALUE rbGps_get_sat(VALUE self) {
190
+ rb_Gps_cls *obj=0;
191
+ Data_Get_Struct(self, rb_Gps_cls, obj);
192
+ struct gps_data_t *data=obj->gps_data;
193
+ if (!obj->gps_data)
194
+ eturn Qnil;
195
+
196
+ VALUE ret=rb_ary_new();
197
+ int sat=0;
198
+ for (sat=0;sat<data->satellites;sat++) {
199
+ VALUE sat_elem=rb_hash_new();
200
+ rb_hash_aset(sat_elem,symbolTable.sat_prn,INT2NUM(data->PRN[sat]));
201
+ rb_hash_aset(sat_elem,symbolTable.sat_elevation,INT2NUM(data->elevation[sat]));
202
+ rb_hash_aset(sat_elem,symbolTable.sat_azimuth,INT2NUM(data->azimuth[sat]));
203
+ rb_hash_aset(sat_elem,symbolTable.sat_ss,INT2NUM(data->ss[sat]));
204
+ rb_hash_aset(sat_elem,symbolTable.sat_used,data->used[sat]?Qtrue:Qfalse);
205
+ rb_ary_push(ret,sat_elem);
206
+ }
207
+ return ret;
208
+ }
178
209
 
179
210
  static void fill_symbol_table() {
180
211
  symbolTable.online=ID2SYM(rb_intern("online"));
@@ -196,6 +227,15 @@ static void fill_symbol_table() {
196
227
  symbolTable.fix_longitude=ID2SYM(rb_intern("longitude"));
197
228
  symbolTable.fix_altitude=ID2SYM(rb_intern("altitude"));
198
229
  symbolTable.fix_speed=ID2SYM(rb_intern("speed"));
230
+ symbolTable.fix_heading=ID2SYM(rb_intern("heading"));
231
+ symbolTable.fix_climb=ID2SYM(rb_intern("climb"));
232
+
233
+ symbolTable.sat_prn=ID2SYM(rb_intern("PRN"));
234
+ symbolTable.sat_elevation=ID2SYM(rb_intern("elevation"));
235
+ symbolTable.sat_azimuth=ID2SYM(rb_intern("azimuth"));
236
+ symbolTable.sat_ss=ID2SYM(rb_intern("ss"));
237
+ symbolTable.sat_used=ID2SYM(rb_intern("used"));
238
+
199
239
 
200
240
  }
201
241
 
@@ -211,6 +251,7 @@ void Init_RbGps() {
211
251
  rb_define_method(cRbGps, "poll" , rbGps_poll , 0);
212
252
  rb_define_method(cRbGps, "get" , rbGps_get , 0);
213
253
  rb_define_method(cRbGps, "get_fix" , rbGps_get_fix , 0);
254
+ rb_define_method(cRbGps, "get_sat" , rbGps_get_sat , 0);
214
255
  rb_define_method(cRbGps, "query" , rbGps_query , 1);
215
256
 
216
257
  }
data/test.rb CHANGED
@@ -1,9 +1,25 @@
1
1
  require 'RbGps'
2
2
  require 'yaml'
3
3
 
4
+ def dump_sats(sats)
5
+ count=0
6
+ sats.each do |sat|
7
+ count=count+1
8
+ line=sat.keys.collect { |key| "#{key} #{sat[key]}" }
9
+ puts "#{count} "+line.join(' ')
10
+ end
11
+ end
12
+
13
+ def dump_fix(fix)
14
+ line=fix.keys.collect { |key| "#{key} #{fix[key]}" }
15
+ puts line.join(' ')
16
+ end
17
+
18
+
4
19
  gps=RbGps.new('localhost','2947')
5
20
 
6
21
  gps.query("w+x\n")
22
+
7
23
  puts "begin loop"
8
24
  loop do
9
25
  gps.query("O=?")
@@ -12,8 +28,8 @@ loop do
12
28
  puts "get"
13
29
  res=gps.get
14
30
  puts res.to_yaml
15
- fix=gps.get_fix
16
- puts fix.to_yaml
31
+ dump_fix(gps.get_fix)
17
32
  puts "next"
33
+ dump_sats(gps.get_sat)
18
34
  sleep 1
19
35
  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.1"
4
+ version: "0.2"
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-02-14 00:00:00 +01:00
12
+ date: 2009-02-22 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -23,8 +23,8 @@ extra_rdoc_files: []
23
23
 
24
24
  files:
25
25
  - ./rb_gps.c
26
- - ./extconf.rb
27
26
  - ./test.rb
27
+ - ./extconf.rb
28
28
  has_rdoc: false
29
29
  homepage: http://gpsd.berlios.de/
30
30
  post_install_message: