spektrum-log 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 16e8299a9a5e5c9feef7434e6b06c31215be4d5d
4
- data.tar.gz: ad822e2785f70364dca30e805f9f8b03d95be924
3
+ metadata.gz: 1290e1e85c63b06ca04ff2ddcb1e6e6bc1a078a9
4
+ data.tar.gz: d844267c31ffe4c308dfd187bb969ade4e8f0d34
5
5
  SHA512:
6
- metadata.gz: d63ec8893c1647b5e231cfa208b7b4698d2d52bd23d9cf4ae37b69b3019814be57b7631f4ca2c5e371c1805d6ee94a3fb4f81cde5a21454d55b3bdf46912fb0a
7
- data.tar.gz: 35794b8e3004dc3751a5657849214d997004e5f9d134011ff08f609348090412953627923a449ae31f6a2bf1062b6ed2f7042d4856b7753f6c1bc983fc28f8b6
6
+ metadata.gz: a77e5bf2d17d03b7e4d16c9760a16423b7692f02d66f93c3daacee07be052350ddce87168268b6c40a8570a368673773e82e8e9a6ab37429f3b5dab12af8863d
7
+ data.tar.gz: 6e4baf468c95764744ec1847034a72831ff541d4ee5c4a1c667a6ff479c373a60effc26ae64b73a036d63aff86e6ae25fe1743a05b3868de0f10df31cb3daa3b
@@ -1,23 +1,39 @@
1
1
  module Spektrum
2
2
  module Log
3
3
 
4
+ # Represents a single recorded flight. Contains information about the model
5
+ # flown, duration of the flight, and all data records contained within.
4
6
  class Flight
5
7
 
6
8
  attr_reader :headers, :records
7
9
 
10
+ # Creates a new flight.
11
+ #
12
+ # @param headers [Array] array of Header objects read from the file
13
+ # @param records [Array] array of Record objects read from the file
8
14
  def initialize(headers, records)
9
15
  @headers = headers
10
16
  @records = records
11
17
  end
12
18
 
19
+ # Gets the duration of the flight, in seconds.
20
+ #
21
+ # @return [Fixnum] duration of the flight, in seconds
13
22
  def duration
14
23
  @duration ||= ((@records.empty? ? 0 : @records.last.timestamp - @records.first.timestamp) / 256)
15
24
  end
16
25
 
26
+ # Determines if this flight has any data. Models without telemetry
27
+ # transmitted, but with logging enabled will create empty flights.
28
+ #
29
+ # @return [Boolean] true if the flight has no records, false otherwise
17
30
  def empty?
18
31
  @records.empty?
19
32
  end
20
33
 
34
+ # Gets the binding type the flight was flown with.
35
+ #
36
+ # @return [String] binding type of the flight, `DSM2`, `DSMX`, etc.
21
37
  def bind_type
22
38
  @bind_type ||= case @headers.first.raw_data[2].unpack('C')[0]
23
39
  when 0x01..0x02
@@ -29,14 +45,23 @@ module Spektrum
29
45
  end
30
46
  end
31
47
 
48
+ # Gets the name of the model for this flight.
49
+ #
50
+ # @return [String] model name
32
51
  def model_name
33
52
  @model_name ||= @headers.first.raw_data[8..18].unpack('Z*')[0].strip
34
53
  end
35
54
 
55
+ # Gets the model's index from the transmitter.
56
+ #
57
+ # @return [Fixnum] model number
36
58
  def model_number
37
59
  @model_number ||= (@headers.first.raw_data[0].unpack('C')[0] + 1)
38
60
  end
39
61
 
62
+ # Gets the type of model flown.
63
+ #
64
+ # @return [String] model type
40
65
  def model_type
41
66
  @model_type ||= case @headers.first.raw_data[1].unpack('C')[0]
42
67
  when 0x00
@@ -48,6 +73,76 @@ module Spektrum
48
73
  end
49
74
  end
50
75
 
76
+ def altimeter_records?
77
+ any_records? AltimeterRecord
78
+ end
79
+
80
+ def altimeter_records
81
+ select_records AltimeterRecord
82
+ end
83
+
84
+ def basic_data_records?
85
+ any_records? BasicDataRecord
86
+ end
87
+
88
+ def basic_data_records
89
+ select_records BasicDataRecord
90
+ end
91
+
92
+ def flight_log_records?
93
+ any_records? FlightLogRecord
94
+ end
95
+
96
+ def flight_log_records
97
+ select_records FlightLogRecord
98
+ end
99
+
100
+ def g_force_records?
101
+ any_records? GForceRecord
102
+ end
103
+
104
+ def g_force_records
105
+ select_records GForceRecord
106
+ end
107
+
108
+ def gps1_records?
109
+ any_records? GPSRecord1
110
+ end
111
+
112
+ def gps1_records
113
+ select_records GPSRecord1
114
+ end
115
+
116
+ def gps2_records?
117
+ any_records? GPSRecord2
118
+ end
119
+
120
+ def gps2_records
121
+ select_records GPSRecord2
122
+ end
123
+
124
+ def speed_records?
125
+ any_records? SpeedRecord
126
+ end
127
+
128
+ def speed_records
129
+ select_records SpeedRecord
130
+ end
131
+
132
+ private
133
+
134
+ # Determines if there are any records in this flight of the given type.
135
+ #
136
+ # @param type [Class] type of record to check for
137
+ # @return []
138
+ def any_records?(type)
139
+ @records.any? { |rec| rec.is_a? type }
140
+ end
141
+
142
+ def select_records(type)
143
+ @records.select { |rec| rec.is_a? type }
144
+ end
145
+
51
146
  end
52
147
 
53
148
  end
@@ -1,16 +1,21 @@
1
1
  module Spektrum
2
2
  module Log
3
3
 
4
+ # Represents a single header from the telemetry file.
4
5
  class Header
5
6
 
6
7
  attr_reader :raw_data
7
8
 
9
+ # Creates a new header.
10
+ #
11
+ # @param [String] raw_data string of data from the data file for this header
8
12
  def initialize raw_data
9
13
  @raw_data = raw_data
10
14
  end
11
15
 
12
16
  end
13
17
 
18
+ # Helper class to create the correct type of header for the given data.
14
19
  class Headers
15
20
 
16
21
  def self.create raw_data
@@ -20,4 +25,4 @@ module Spektrum
20
25
  end
21
26
 
22
27
  end
23
- end
28
+ end
@@ -1,6 +1,7 @@
1
1
  module Spektrum
2
2
  module Log
3
3
 
4
+ # Represents a single record from the telemetry file.
4
5
  class Record
5
6
 
6
7
  attr_reader :timestamp
@@ -93,10 +94,16 @@ module Spektrum
93
94
  super timestamp, raw_data
94
95
  end
95
96
 
97
+ # Gets the receiver pack voltage data.
98
+ #
99
+ # @return [Float] rx voltage data, in volts
96
100
  def rx_voltage
97
101
  raw_rx_voltage / 100.0
98
102
  end
99
103
 
104
+ # Determines if there is receiver voltage data contained within.
105
+ #
106
+ # @return [Boolean] true if there is rx voltage data, false otherwise
100
107
  def rx_voltage?
101
108
  raw_rx_voltage != 0x7FFF
102
109
  end
@@ -228,6 +235,7 @@ module Spektrum
228
235
 
229
236
  end
230
237
 
238
+
231
239
  class Records
232
240
 
233
241
  @@types = {
@@ -1,5 +1,5 @@
1
1
  module Spektrum
2
2
  module Log
3
- VERSION = "0.0.4"
3
+ VERSION = "0.0.5"
4
4
  end
5
5
  end
data/spec/flight_spec.rb CHANGED
@@ -236,6 +236,20 @@ describe Spektrum::Log::Flight do
236
236
 
237
237
  its(:model_type) { should eql('Helicopter') }
238
238
 
239
+ its(:altimeter_records?) { should be_false }
240
+
241
+ its(:basic_data_records?) { should be_true }
242
+
243
+ its(:flight_log_records?) { should be_true }
244
+
245
+ its(:g_force_records?) { should be_false }
246
+
247
+ its(:gps1_records?) { should be_false }
248
+
249
+ its(:gps2_records?) { should be_false }
250
+
251
+ its(:speed_records?) { should be_false }
252
+
239
253
  end
240
254
 
241
255
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spektrum-log
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
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-05-13 00:00:00.000000000 Z
11
+ date: 2013-05-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -111,3 +111,4 @@ test_files:
111
111
  - spec/flight_spec.rb
112
112
  - spec/reader_spec.rb
113
113
  - spec/spec_helper.rb
114
+ has_rdoc: