jeti-log 0.3.0 → 0.4.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a9db625f92f08eaf6a887d84fcb3ba5fc7ddeb6c
4
- data.tar.gz: 2158b60e16c76316438d462cb8fc7bdaca7237dd
3
+ metadata.gz: 524fb73de38b2fab3e17ae6ecc55028d3f8f3262
4
+ data.tar.gz: bb43f164323fdb1b10c50f8dfed235aa74604fe4
5
5
  SHA512:
6
- metadata.gz: 11ec76d5154bafd8165130cfdec554a684db6a82118dc03fca182611781778cec13d1e510bd50104ac5ce9d88600a45fb03d32f09276aaf2f65fd8edaf93ac4c
7
- data.tar.gz: abd6612c2ec5bd92bca532d907317a2363fa3396810a6ae76911460f017fb6b42af9c94b86930bc38d009e4717947af0d96ff6d7a88c40b2bcb2ef7b23d002e8
6
+ metadata.gz: cde12671376244b78728f2ce35a83496b53250c93f55adff1637a7136560e3a87a63033c334cc463e9c2210efdde4fd5d5ffa712f8877db5453807edaabbfc68
7
+ data.tar.gz: 7289922bf86762c069ac0f2378323b4949b865dc3206ff2b18e68cf7212b442ae7bdaccf392478bfae52ad718eb754909912d914baaceb6bf90f78ad6b1361d2
@@ -1,7 +1,9 @@
1
- require 'jeti/log/coordinate'
1
+ require 'jeti/log/composite_dataset_builder'
2
2
  require 'jeti/log/entry'
3
3
  require 'jeti/log/file'
4
4
  require 'jeti/log/header'
5
5
  require 'jeti/log/mezon_data'
6
+ require 'jeti/log/mgps_data'
6
7
  require 'jeti/log/mui_data'
8
+ require 'jeti/log/tx_data'
7
9
  require 'jeti/log/version'
@@ -0,0 +1,30 @@
1
+ module Jeti; module Log;
2
+
3
+ class CompositeDatasetBuilder
4
+
5
+ def self.build(file, clazz, device, primary, *others)
6
+ primaries = if primary.is_a? Array
7
+ file.value_dataset(device, primary[0], primary[1])
8
+ else
9
+ file.value_dataset(device, primary)
10
+ end
11
+
12
+ other_data = others.map do |other|
13
+ if other.is_a? Array
14
+ file.value_dataset(device, other[0], other[1])
15
+ else
16
+ file.value_dataset(device, other)
17
+ end
18
+ end
19
+
20
+ primaries.map do |raw|
21
+ time = raw[0]
22
+ f0 = raw[1]
23
+ fn = other_data.map { |d| d.min_by { |dp| (dp[0] - time).abs }[1] }
24
+ clazz.new(time, fn.unshift(f0))
25
+ end
26
+ end
27
+
28
+ end
29
+
30
+ end; end
@@ -60,7 +60,7 @@ module Jeti; module Log;
60
60
  end
61
61
 
62
62
  def antenna1_signals
63
- @antenna1_signals ||= build_value_dataset(/Rx/, /A1/)
63
+ @antenna1_signals ||= value_dataset(/Rx/, /A1/)
64
64
  end
65
65
 
66
66
  def antenna2_signals?
@@ -68,7 +68,7 @@ module Jeti; module Log;
68
68
  end
69
69
 
70
70
  def antenna2_signals
71
- @antenna2_signals ||= build_value_dataset(/Rx/, /A2/)
71
+ @antenna2_signals ||= value_dataset(/Rx/, /A2/)
72
72
  end
73
73
 
74
74
  def rx_voltages?
@@ -84,15 +84,15 @@ module Jeti; module Log;
84
84
  end
85
85
 
86
86
  def signal_qualities
87
- @signal_qualities ||= build_value_dataset(/Rx/, /Q/)
87
+ @signal_qualities ||= value_dataset(/Rx/, /Q/)
88
88
  end
89
89
 
90
- def mgps_locations?
90
+ def mgps_data?
91
91
  device_present?(/MGPS/)
92
92
  end
93
93
 
94
- def mgps_locations
95
- @mgps_locations ||= build_mgps_locations
94
+ def mgps_data
95
+ @mgps_data ||= MGPSDataBuilder.build(self)
96
96
  end
97
97
 
98
98
  def mezon_data?
@@ -100,14 +100,22 @@ module Jeti; module Log;
100
100
  end
101
101
 
102
102
  def mezon_data
103
- @mezon_data ||= build_mezon_data
103
+ @mezon_data ||= MezonDataBuilder.build(self)
104
+ end
105
+
106
+ def tx_data?
107
+ device_present?(/Tx/)
108
+ end
109
+
110
+ def tx_data
111
+ @tx_data ||= build_tx_data
104
112
  end
105
113
 
106
114
  # Determines if KML methods can be called for this session.
107
115
  #
108
116
  # @return [Boolean] true if KML can be generated for this session, false otherwise
109
117
  def to_kml?
110
- mgps_locations?
118
+ mgps_data?
111
119
  end
112
120
 
113
121
  # Converts the session into a KML document containing a placemark.
@@ -164,7 +172,7 @@ module Jeti; module Log;
164
172
  raise RuntimeError, 'No coordinates available for KML generation' unless to_kml?
165
173
  options = apply_default_placemark_options(options)
166
174
 
167
- coords = mgps_locations.map { |l| [l.longitude, l.latitude, l.altitude] }
175
+ coords = mgps_data.map { |l| [l.longitude, l.latitude, l.altitude] }
168
176
  KML::Placemark.new(
169
177
  :name => options[:name],
170
178
  :style_url => options[:style_url],
@@ -177,6 +185,13 @@ module Jeti; module Log;
177
185
  )
178
186
  end
179
187
 
188
+ def value_dataset(device, sensor, modifier = ->(val) { val })
189
+ headers, entries = headers_and_entries_for_device(device)
190
+ sensor_id = (headers.select { |h| sensor =~ h.name })[0].sensor_id
191
+ entries.reject! { |e| e.detail(sensor_id).nil? }
192
+ entries.map { |e| [e.time, modifier.call(e.value(sensor_id))] }
193
+ end
194
+
180
195
  private
181
196
 
182
197
  def apply_default_file_options options
@@ -195,60 +210,19 @@ module Jeti; module Log;
195
210
  options
196
211
  end
197
212
 
198
- def build_mezon_data
199
- vbatts = build_value_dataset(/Mezon/i, /U Battery/, ->(val) { val / 10.0 })
200
- ibatts = build_value_dataset(/Mezon/i, /I Battery/)
201
- vbecs = build_value_dataset(/Mezon/i, /U BEC/, ->(val) { val / 10.0 })
202
- ibecs = build_value_dataset(/Mezon/i, /I BEC/)
203
- mahs = build_value_dataset(/Mezon/i, /Capacity/)
204
- rpms = build_value_dataset(/Mezon/i, /Revolution/)
205
- temps = build_value_dataset(/Mezon/i, /Temp/)
206
- times = build_value_dataset(/Mezon/i, /Run Time/)
207
- pwms = build_value_dataset(/Mezon/i, /PWM/)
208
-
209
- vbatts.map do |raw_vb|
210
- time = raw_vb[0]
211
- vbatt = raw_vb[1]
212
- ibatt = ibatts.min_by { |e| (e[0] - time).abs }[1]
213
- vbec = vbecs.min_by { |e| (e[0] - time).abs }[1]
214
- ibec = ibecs.min_by { |e| (e[0] - time).abs }[1]
215
- mah = mahs.min_by { |e| (e[0] - time).abs }[1]
216
- rpm = rpms.min_by { |e| (e[0] - time).abs }[1]
217
- temp = temps.min_by { |e| (e[0] - time).abs }[1]
218
- runtime = times.min_by { |e| (e[0] - time).abs }[1]
219
- pwm = pwms.min_by { |e| (e[0] - time).abs }[1]
220
- MezonData.new(time, vbatt, ibatt, vbec, ibec, mah, rpm, temp, runtime, pwm)
221
- end
222
- end
223
-
224
- def build_mgps_locations
225
- lats = build_value_dataset(/MGPS/, /Latitude/)
226
- lons = build_value_dataset(/MGPS/, /Longitude/)
227
- alts = build_value_dataset(/MGPS/, /Altitude/)
228
- crss = build_value_dataset(/MGPS/, /Course/)
229
-
230
- lats.map do |raw_lat|
231
- time = raw_lat[0]
232
- lat = raw_lat[1]
233
- lon = lons.min_by { |lon| (lon[0] - time).abs }[1]
234
- alt = alts.min_by { |alt| (alt[0] - time).abs }[1]
235
- crs = crss.min_by { |crs| (crs[0] - time).abs }[1]
236
- Coordinate.new(time, lat, lon, alt, crs)
237
- end
213
+ def build_rx_voltages
214
+ value_dataset(/Rx/, /U Rx/, ->(val) { val / 100.0 })
238
215
  end
239
216
 
240
- def build_rx_voltages
241
- build_value_dataset(/Rx/, /U Rx/, ->(val) { val / 100.0 })
217
+ def build_tx_data
218
+ []
242
219
  end
243
220
 
244
- def build_value_dataset(device, sensor, modifier = ->(val) { val })
245
- headers, entries = headers_and_entries_by_device(device)
246
- sensor_id = (headers.select { |h| sensor =~ h.name })[0].sensor_id
247
- entries.reject! { |e| e.detail(sensor_id).nil? }
248
- entries.map { |e| [e.time, modifier.call(e.value(sensor_id))] }
221
+ def device_present?(device)
222
+ @headers.any? { |h| device =~ h.name }
249
223
  end
250
224
 
251
- def headers_and_entries_by_device(device)
225
+ def headers_and_entries_for_device(device)
252
226
  headers = @headers.select { |h| device =~ h.name }
253
227
  return [[],[]] if headers.empty?
254
228
 
@@ -258,10 +232,6 @@ module Jeti; module Log;
258
232
  [headers, entries]
259
233
  end
260
234
 
261
- def device_present?(device)
262
- @headers.any? { |h| device =~ h.name }
263
- end
264
-
265
235
  end
266
236
 
267
237
  end; end
@@ -12,17 +12,11 @@ module Jeti; module Log;
12
12
  attr_reader :run_time
13
13
  attr_reader :pwm
14
14
 
15
- def initialize(time, vbatt, ibatt, vbec, ibec, mah, rpm, temp, runtime, pwm)
15
+ def initialize(time, fields)
16
+ raise ArgumentError unless fields.length == 9
16
17
  @time = time
17
- @battery_voltage = vbatt
18
- @battery_current = ibatt
19
- @bec_voltage = vbec
20
- @bec_current = ibec
21
- @capacity = mah
22
- @rpm = rpm
23
- @temperature = temp
24
- @run_time = runtime
25
- @pwm = pwm
18
+ @battery_voltage, @battery_current, @bec_voltage, @bec_current, @capacity,
19
+ @rpm, @temperature, @run_time, @pwm = fields
26
20
  end
27
21
 
28
22
  def temperature(unit = :c)
@@ -36,4 +30,15 @@ module Jeti; module Log;
36
30
 
37
31
  end
38
32
 
33
+ class MezonDataBuilder
34
+
35
+ def self.build(file)
36
+ div10 = ->(val) { val / 10.0 }
37
+ CompositeDatasetBuilder.build(file, MezonData, /Mezon/i, [/U Battery/, div10],
38
+ /I Battery/, [/U BEC/, div10], /I BEC/, /Capacity/,
39
+ /Revolution/, /Temp/, /Run Time/, /PWM/)
40
+ end
41
+
42
+ end
43
+
39
44
  end; end
@@ -0,0 +1,40 @@
1
+ module Jeti; module Log;
2
+
3
+ class MGPSData
4
+
5
+ attr_reader :time
6
+ attr_reader :latitude
7
+ attr_reader :longitude
8
+ attr_reader :course
9
+
10
+ def initialize(time, fields)
11
+ raise ArgumentError unless fields.length == 4
12
+ @time = time
13
+ @latitude, @longitude, @altitude, @course = fields
14
+ end
15
+
16
+ # Gets the altitude, in desired unit.
17
+ #
18
+ # @param unit one of :feet, :meters to define desired unit
19
+ # @return [Float] altitude in the desired unit
20
+ def altitude(unit = :feet)
21
+ case unit
22
+ when :feet
23
+ @altitude * 0.32808399
24
+ else
25
+ @altitude
26
+ end
27
+ end
28
+
29
+ end
30
+
31
+ class MGPSDataBuilder
32
+
33
+ def self.build(file)
34
+ CompositeDatasetBuilder.build(file, MGPSData, /MGPS/, /Latitude/,
35
+ /Longitude/, /Altitude/, /Course/)
36
+ end
37
+
38
+ end
39
+
40
+ end; end
@@ -0,0 +1,7 @@
1
+ module Jeti; module Log;
2
+
3
+ class TxData
4
+
5
+ end
6
+
7
+ end; end
@@ -1,5 +1,5 @@
1
1
  module Jeti
2
2
  module Log
3
- VERSION = '0.3.0'
3
+ VERSION = '0.4.0'
4
4
  end
5
5
  end
@@ -0,0 +1,99 @@
1
+ # Blade 130X
2
+ 000000000;4291420554;0;Tx;
3
+ 000000000;4291420554;1;Control P4;
4
+ 000000000;4291420554;2;Control P3;
5
+ 000000000;4291420554;3;Control P2;
6
+ 000000000;4291420554;4;Control P1;
7
+ 000000000;4272121973;0;Rx;
8
+ 000000000;4272121973;1;U Rx;V
9
+ 000000000;4272121973;2;A1;
10
+ 000000000;4272121973;3;A2;
11
+ 000000000;4272121973;4;Q;%
12
+ 000050898;4291420554;1;1;0;1;2;1;0;50;3;1;0;50;4;1;0;50;
13
+ 000051118;4291420554;1;1;0;1;2;1;0;50;3;1;0;50;4;1;0;50;
14
+ 000051338;4291420554;1;1;0;1;2;1;0;50;3;1;0;50;4;1;0;50;
15
+ 000051558;4291420554;1;1;0;1;2;1;0;50;3;1;0;50;4;1;0;50;
16
+ 000051778;4291420554;1;1;0;1;2;1;0;50;3;1;0;50;4;1;0;50;
17
+ 000052005;4291420554;1;1;0;1;2;1;0;50;3;1;0;50;4;1;0;50;
18
+ 000052235;4291420554;1;1;0;1;2;1;0;50;3;1;0;50;4;1;0;50;
19
+ 000052438;4291420554;1;1;0;3;2;1;0;50;3;1;0;50;4;1;0;50;
20
+ 000052658;4291420554;1;1;0;7;2;1;0;50;3;1;0;50;4;1;0;50;
21
+ 000052878;4291420554;1;1;0;14;2;1;0;50;3;1;0;50;4;1;0;50;
22
+ 000053098;4291420554;1;1;0;21;2;1;0;50;3;1;0;50;4;1;0;50;
23
+ 000053318;4291420554;1;1;0;29;2;1;0;50;3;1;0;50;4;1;0;50;
24
+ 000053565;4291420554;1;1;0;38;2;1;0;50;3;1;0;50;4;1;0;50;
25
+ 000053765;4291420554;1;1;0;46;2;1;0;50;3;1;0;50;4;1;0;50;
26
+ 000053978;4291420554;1;1;0;54;2;1;0;50;3;1;0;50;4;1;0;50;
27
+ 000054198;4291420554;1;1;0;62;2;1;0;50;3;1;0;50;4;1;0;50;
28
+ 000054418;4291420554;1;1;0;70;2;1;0;50;3;1;0;50;4;1;0;50;
29
+ 000054638;4291420554;1;1;0;75;2;1;0;50;3;1;0;50;4;1;0;50;
30
+ 000054874;4291420554;1;1;0;81;2;1;0;50;3;1;0;50;4;1;0;50;
31
+ 000055078;4291420554;1;1;0;88;2;1;0;50;3;1;0;50;4;1;0;50;
32
+ 000055298;4291420554;1;1;0;94;2;1;0;50;3;1;0;50;4;1;0;50;
33
+ 000055518;4291420554;1;1;0;99;2;1;0;50;3;1;0;50;4;1;0;50;
34
+ 000055748;4291420554;1;1;0;99;2;1;0;50;3;1;0;50;4;1;0;50;
35
+ 000055965;4291420554;1;1;0;78;2;1;0;50;3;1;0;50;4;1;0;50;
36
+ 000056194;4291420554;1;1;0;57;2;1;0;27;3;1;0;50;4;1;0;50;
37
+ 000056398;4291420554;1;1;0;50;2;1;0;7;3;1;0;50;4;1;0;50;
38
+ 000056618;4291420554;1;1;0;46;2;1;0;93;3;1;0;50;4;1;0;50;
39
+ 000056838;4291420554;1;1;0;54;2;1;0;50;3;1;0;50;4;1;0;50;
40
+ 000057058;4291420554;1;1;0;49;2;1;0;2;3;1;0;50;4;1;0;50;
41
+ 000057280;4291420554;1;1;0;49;2;1;0;90;3;1;0;50;4;1;0;50;
42
+ 000057498;4291420554;1;1;0;50;2;1;0;38;3;1;0;50;4;1;0;50;
43
+ 000057718;4291420554;1;1;0;52;2;1;0;2;3;1;0;50;4;1;0;50;
44
+ 000057938;4291420554;1;1;0;58;2;1;0;81;3;1;0;50;4;1;0;50;
45
+ 000058158;4291420554;1;1;0;54;2;1;0;89;3;1;0;50;4;1;0;50;
46
+ 000058378;4291420554;1;1;0;51;2;1;0;39;3;1;0;50;4;1;0;50;
47
+ 000058598;4291420554;1;1;0;50;2;1;0;50;3;1;0;50;4;1;0;50;
48
+ 000058845;4291420554;1;1;0;50;2;1;0;50;3;1;0;50;4;1;0;50;
49
+ 000059038;4291420554;1;1;0;50;2;1;0;50;3;1;0;50;4;1;0;50;
50
+ 000059258;4291420554;1;1;0;50;2;1;0;50;3;1;0;84;4;1;0;50;
51
+ 000059478;4291420554;1;1;0;50;2;1;0;50;3;1;0;37;4;1;0;50;
52
+ 000059698;4291420554;1;1;0;50;2;1;0;50;3;1;0;12;4;1;0;50;
53
+ 000059918;4291420554;1;1;0;50;2;1;0;50;3;1;0;86;4;1;0;50;
54
+ 000060154;4291420554;1;1;0;50;2;1;0;50;3;1;0;49;4;1;0;50;
55
+ 000060358;4291420554;1;1;0;50;2;1;0;50;3;1;0;17;4;1;0;50;
56
+ 000060578;4291420554;1;1;0;50;2;1;0;50;3;1;0;70;4;1;0;50;
57
+ 000060798;4291420554;1;1;0;50;2;1;0;50;3;1;0;83;4;1;0;50;
58
+ 000061018;4291420554;1;1;0;50;2;1;0;50;3;1;0;29;4;1;0;50;
59
+ 000061245;4291420554;1;1;0;50;2;1;0;50;3;1;0;20;4;1;0;50;
60
+ 000061474;4291420554;1;1;0;50;2;1;0;50;3;1;0;69;4;1;0;50;
61
+ 000061678;4291420554;1;1;0;50;2;1;0;50;3;1;0;80;4;1;0;50;
62
+ 000061898;4291420554;1;1;0;50;2;1;0;50;3;1;0;20;4;1;0;50;
63
+ 000062118;4291420554;1;1;0;50;2;1;0;50;3;1;0;13;4;1;0;50;
64
+ 000062338;4291420554;1;1;0;50;2;1;0;50;3;1;0;75;4;1;0;50;
65
+ 000062558;4291420554;1;1;0;50;2;1;0;50;3;1;0;77;4;1;0;50;
66
+ 000062805;4291420554;1;1;0;50;2;1;0;50;3;1;0;38;4;1;0;50;
67
+ 000062998;4291420554;1;1;0;50;2;1;0;50;3;1;0;47;4;1;0;41;
68
+ 000063218;4291420554;1;1;0;50;2;1;0;50;3;1;0;43;4;1;0;3;
69
+ 000063438;4291420554;1;1;0;50;2;1;0;50;3;1;0;50;4;1;0;70;
70
+ 000063658;4291420554;1;1;0;50;2;1;0;50;3;1;0;47;4;1;0;60;
71
+ 000063878;4291420554;1;1;0;50;2;1;0;50;3;1;0;50;4;1;0;11;
72
+ 000064125;4291420554;1;1;0;50;2;1;0;50;3;1;0;50;4;1;0;79;
73
+ 000064318;4291420554;1;1;0;50;2;1;0;50;3;1;0;45;4;1;0;65;
74
+ 000064538;4291420554;1;1;0;50;2;1;0;50;3;1;0;44;4;1;0;1;
75
+ 000064758;4291420554;1;1;0;50;2;1;0;50;3;1;0;50;4;1;0;76;
76
+ 000064978;4291420554;1;1;0;50;2;1;0;50;3;1;0;44;4;1;0;76;
77
+ 000065201;4291420554;1;1;0;50;2;1;0;50;3;1;0;50;4;1;0;9;
78
+ 000065434;4291420554;1;1;0;50;2;1;0;50;3;1;0;51;4;1;0;65;
79
+ 000065638;4291420554;1;1;0;50;2;1;0;50;3;1;0;50;4;1;0;86;
80
+ 000065858;4291420554;1;1;0;50;2;1;0;50;3;1;0;50;4;1;0;9;
81
+ 000066078;4291420554;1;1;0;50;2;1;0;50;3;1;0;53;4;1;0;50;
82
+ 000066298;4291420554;1;1;0;50;2;1;0;50;3;1;0;49;4;1;0;59;
83
+ 000066525;4291420554;1;1;0;50;2;1;0;50;3;1;0;50;4;1;0;50;
84
+ 000066754;4291420554;1;1;0;50;2;1;0;50;3;1;0;50;4;1;0;50;
85
+ 000066958;4291420554;1;1;0;39;2;1;0;50;3;1;0;50;4;1;0;50;
86
+ 000067178;4291420554;1;1;0;34;2;1;0;50;3;1;0;50;4;1;0;50;
87
+ 000067398;4291420554;1;1;0;34;2;1;0;50;3;1;0;50;4;1;0;50;
88
+ 000067618;4291420554;1;1;0;34;2;1;0;50;3;1;0;50;4;1;0;50;
89
+ 000067838;4291420554;1;1;0;34;2;1;0;50;3;1;0;50;4;1;0;50;
90
+ 000068058;4291420554;1;1;0;34;2;1;0;50;3;1;0;50;4;1;0;50;
91
+ 000068278;4291420554;1;1;0;34;2;1;0;50;3;1;0;50;4;1;0;50;
92
+ 000068498;4291420554;1;1;0;34;2;1;0;50;3;1;0;50;4;1;0;50;
93
+ 000068718;4291420554;1;1;0;1;2;1;0;50;3;1;0;50;4;1;0;50;
94
+ 000068938;4291420554;1;1;0;1;2;1;0;50;3;1;0;50;4;1;0;50;
95
+ 000069158;4291420554;1;1;0;1;2;1;0;50;3;1;0;50;4;1;0;50;
96
+ 000069400;4291420554;1;1;0;1;2;1;0;50;3;1;0;50;4;1;0;50;
97
+ 000069598;4291420554;1;1;0;1;2;1;0;50;3;1;0;50;4;1;0;50;
98
+ 000069818;4291420554;1;1;0;1;2;1;0;50;3;1;0;50;4;1;0;50;
99
+ 000070038;4291420554;1;1;0;1;2;1;0;50;3;1;0;50;4;1;0;50;
@@ -50,7 +50,7 @@ describe Jeti::Log::File do
50
50
  expect(subject.signal_qualities[90]).to eql([1120425, 100])
51
51
  end
52
52
 
53
- its(:mgps_locations?) { should be_false }
53
+ its(:mgps_data?) { should be_false }
54
54
 
55
55
  its(:to_kml?) { should be_false }
56
56
 
@@ -110,26 +110,26 @@ describe Jeti::Log::File do
110
110
  expect(subject.signal_qualities[90]).to eql([265538, 100])
111
111
  end
112
112
 
113
- its(:mgps_locations?) { should be_true }
113
+ its(:mgps_data?) { should be_true }
114
114
 
115
- it { should have(539).mgps_locations }
115
+ it { should have(539).mgps_data }
116
116
 
117
117
  it 'should have some select gps locations' do
118
- loc = subject.mgps_locations[0]
118
+ loc = subject.mgps_data[0]
119
119
  expect(loc.time).to eql(219552)
120
120
  expect(loc.latitude).to be_within(0.0001).of(41.1856)
121
121
  expect(loc.longitude).to be_within(0.0001).of(-96.0103)
122
122
  expect(loc.altitude(:meters)).to eql(309)
123
123
  expect(loc.course).to eql(0)
124
124
 
125
- loc = subject.mgps_locations[250]
125
+ loc = subject.mgps_data[250]
126
126
  expect(loc.time).to eql(347038)
127
127
  expect(loc.latitude).to be_within(0.0001).of(41.1868)
128
128
  expect(loc.longitude).to be_within(0.0001).of(-96.0094)
129
129
  expect(loc.altitude(:meters)).to eql(352)
130
130
  expect(loc.course).to eql(294)
131
131
 
132
- loc = subject.mgps_locations[450]
132
+ loc = subject.mgps_data[450]
133
133
  expect(loc.time).to eql(456409)
134
134
  expect(loc.latitude).to be_within(0.0001).of(41.1871)
135
135
  expect(loc.longitude).to be_within(0.0001).of(-96.0091)
@@ -171,7 +171,7 @@ describe Jeti::Log::File do
171
171
 
172
172
  its(:signal_qualities?) { should be_true }
173
173
 
174
- its(:mgps_locations?) { should be_false }
174
+ its(:mgps_data?) { should be_false }
175
175
 
176
176
  its(:mezon_data?) { should be_true }
177
177
 
@@ -221,7 +221,7 @@ describe Jeti::Log::File do
221
221
 
222
222
  its(:signal_qualities?) { should be_true }
223
223
 
224
- its(:mgps_locations?) { should be_false }
224
+ its(:mgps_data?) { should be_false }
225
225
 
226
226
  its(:mezon_data?) { should be_true }
227
227
 
@@ -277,7 +277,7 @@ describe Jeti::Log::File do
277
277
 
278
278
  its(:signal_qualities?) { should be_true }
279
279
 
280
- its(:mgps_locations?) { should be_false }
280
+ its(:mgps_data?) { should be_false }
281
281
 
282
282
  its(:mezon_data?) { should be_true }
283
283
 
@@ -358,6 +358,16 @@ describe Jeti::Log::File do
358
358
 
359
359
  end
360
360
 
361
+ context 'with data file tx-controls.log' do
362
+
363
+ before(:all) { @file = Jeti::Log::File.new(data_file('tx-controls.log')) }
364
+
365
+ subject { @file }
366
+
367
+ its(:duration) { should be_within(1).of(19) }
368
+
369
+ end
370
+
361
371
  it 'should raise for invalid or missing files' do
362
372
  files = invalid_data_files
363
373
  files.should have(9).files
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe Jeti::Log::MezonData do
4
4
 
5
- subject { Jeti::Log::MezonData.new(25, 15.1, 5, 5.4, 1, 250, 1000, 25, 150, 99) }
5
+ subject { Jeti::Log::MezonData.new(25, [15.1, 5, 5.4, 1, 250, 1000, 25, 150, 99]) }
6
6
 
7
7
  its(:time) { should eql(25) }
8
8
 
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Jeti::Log::Coordinate do
3
+ describe Jeti::Log::MGPSData do
4
4
 
5
5
  it 'does stuff'
6
6
 
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe Jeti::Log::TxData do
4
+
5
+ it 'does stuff'
6
+
7
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jeti-log
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Veys
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-11 00:00:00.000000000 Z
11
+ date: 2013-11-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: awesome_print
@@ -152,14 +152,15 @@ files:
152
152
  - Rakefile
153
153
  - jeti-log.gemspec
154
154
  - lib/jeti/log.rb
155
- - lib/jeti/log/coordinate.rb
155
+ - lib/jeti/log/composite_dataset_builder.rb
156
156
  - lib/jeti/log/entry.rb
157
157
  - lib/jeti/log/file.rb
158
158
  - lib/jeti/log/header.rb
159
159
  - lib/jeti/log/mezon_data.rb
160
+ - lib/jeti/log/mgps_data.rb
160
161
  - lib/jeti/log/mui_data.rb
162
+ - lib/jeti/log/tx_data.rb
161
163
  - lib/jeti/log/version.rb
162
- - spec/coordinate_spec.rb
163
164
  - spec/data/1min-tx-rx.log
164
165
  - spec/data/gps-crash.log
165
166
  - spec/data/invalid/castle/long-flight.csv
@@ -172,10 +173,13 @@ files:
172
173
  - spec/data/mezon-1.log
173
174
  - spec/data/mezon-2.log
174
175
  - spec/data/mezon-3.log
176
+ - spec/data/tx-controls.log
175
177
  - spec/file_spec.rb
176
178
  - spec/mezon_data_spec.rb
179
+ - spec/mgps_data_spec.rb
177
180
  - spec/mui_data_spec.rb
178
181
  - spec/spec_helper.rb
182
+ - spec/tx_data_spec.rb
179
183
  homepage: ''
180
184
  licenses:
181
185
  - MIT
@@ -196,12 +200,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
196
200
  version: '0'
197
201
  requirements: []
198
202
  rubyforge_project:
199
- rubygems_version: 2.0.3
203
+ rubygems_version: 2.0.6
200
204
  signing_key:
201
205
  specification_version: 4
202
206
  summary: Jeti telemetry log file reader
203
207
  test_files:
204
- - spec/coordinate_spec.rb
205
208
  - spec/data/1min-tx-rx.log
206
209
  - spec/data/gps-crash.log
207
210
  - spec/data/invalid/castle/long-flight.csv
@@ -214,7 +217,10 @@ test_files:
214
217
  - spec/data/mezon-1.log
215
218
  - spec/data/mezon-2.log
216
219
  - spec/data/mezon-3.log
220
+ - spec/data/tx-controls.log
217
221
  - spec/file_spec.rb
218
222
  - spec/mezon_data_spec.rb
223
+ - spec/mgps_data_spec.rb
219
224
  - spec/mui_data_spec.rb
220
225
  - spec/spec_helper.rb
226
+ - spec/tx_data_spec.rb
@@ -1,30 +0,0 @@
1
- module Jeti; module Log;
2
-
3
- class Coordinate
4
-
5
- attr_reader :time, :latitude, :longitude, :course
6
-
7
- def initialize(time, latitude, longitude, altitude, course)
8
- @time = time
9
- @latitude = latitude
10
- @longitude = longitude
11
- @altitude = altitude
12
- @course = course
13
- end
14
-
15
- # Gets the altitude, in desired unit.
16
- #
17
- # @param unit one of :feet, :meters to define desired unit
18
- # @return [Float] altitude in the desired unit
19
- def altitude(unit = :feet)
20
- case unit
21
- when :feet
22
- @altitude * 0.32808399
23
- else
24
- @altitude
25
- end
26
- end
27
-
28
- end
29
-
30
- end; end