spektrum-log 0.0.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 80e40d14225d2fc99ad38744cbf85752aca4832b
4
+ data.tar.gz: a15dc90df0edd293bd38bfc852e596063e88ddb8
5
+ SHA512:
6
+ metadata.gz: 46d5b8afdaefe491852f77fbacc85cf48fb20a93ef33cd437e130ae324dd3c3391819f34a23beacdf129327da13735c27de8caef9a4dab046b1a9ceda24f822c
7
+ data.tar.gz: 4f46200e10324cf7024f440b1f8430265923aeb212b54c2539ec8716c477756efb0ca0a217ded1c98b08aea300243cdfe51dc571b396dcf2255a77f67e75b389
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ .idea
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
data/.travis.yml ADDED
@@ -0,0 +1,7 @@
1
+ rvm:
2
+ - 1.9.3
3
+ - 2.0.0
4
+ - jruby
5
+
6
+ notifications:
7
+ disabled: true
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in spektrum-log.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Nick Veys
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,35 @@
1
+ # Spektrum::Log [![Build Status](https://travis-ci.org/code-lever/spektrum-log.png)](https://travis-ci.org/code-lever/spektrum-log)
2
+
3
+ TODO: Write a gem description
4
+
5
+ Research:
6
+
7
+ * http://www.rcgroups.com/forums/showthread.php?t=1726960
8
+ * http://www.rcgroups.com/forums/showthread.php?t=1725173
9
+ * http://www.rcgroups.com/forums/showthread.php?t=1725173&page=6#86 -- more refinement
10
+
11
+ ## Installation
12
+
13
+ Add this line to your application's Gemfile:
14
+
15
+ gem 'spektrum-log'
16
+
17
+ And then execute:
18
+
19
+ $ bundle
20
+
21
+ Or install it yourself as:
22
+
23
+ $ gem install spektrum-log
24
+
25
+ ## Usage
26
+
27
+ TODO: Write usage instructions here
28
+
29
+ ## Contributing
30
+
31
+ 1. Fork it
32
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
33
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
34
+ 4. Push to the branch (`git push origin my-new-feature`)
35
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
3
+ require 'rspec/core/rake_task'
4
+
5
+ RSpec::Core::RakeTask.new('spec')
6
+ task :default => :spec
data/data/1.TLM ADDED
Binary file
data/data/2.TLM ADDED
Binary file
data/data/3.TLM ADDED
Binary file
data/data/4.TLM ADDED
Binary file
@@ -0,0 +1,5 @@
1
+ require "spektrum-log/flight"
2
+ require "spektrum-log/headers"
3
+ require "spektrum-log/reader"
4
+ require "spektrum-log/records"
5
+ require "spektrum-log/version"
@@ -0,0 +1,54 @@
1
+ module Spektrum
2
+ module Log
3
+
4
+ class Flight
5
+
6
+ attr_reader :headers, :records
7
+
8
+ def initialize(headers, records)
9
+ @headers = headers
10
+ @records = records
11
+ end
12
+
13
+ def duration
14
+ @records.empty? ? 0 : @records.last.timestamp - @records.first.timestamp
15
+ end
16
+
17
+ def empty?
18
+ @records.empty?
19
+ end
20
+
21
+ def bind_type
22
+ case @headers.first.raw_data[2].unpack('C')[0]
23
+ when 0x01..0x02
24
+ 'DSM2'
25
+ when 0x03..0x04
26
+ 'DSMX'
27
+ else
28
+ 'Unknown'
29
+ end
30
+ end
31
+
32
+ def model_name
33
+ @headers.first.raw_data[8..18].unpack('Z*')[0]
34
+ end
35
+
36
+ def model_number
37
+ @headers.first.raw_data[0].unpack('C')[0] + 1
38
+ end
39
+
40
+ def model_type
41
+ case @headers.first.raw_data[1].unpack('C')[0]
42
+ when 0x00
43
+ 'Fixed Wing'
44
+ when 0x01
45
+ 'Helicopter'
46
+ else
47
+ 'Unknown'
48
+ end
49
+ end
50
+
51
+ end
52
+
53
+ end
54
+ end
@@ -0,0 +1,23 @@
1
+ module Spektrum
2
+ module Log
3
+
4
+ class Header
5
+
6
+ attr_reader :raw_data
7
+
8
+ def initialize raw_data
9
+ @raw_data = raw_data
10
+ end
11
+
12
+ end
13
+
14
+ class Headers
15
+
16
+ def self.create raw_data
17
+ Header.new(raw_data)
18
+ end
19
+
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,56 @@
1
+ module Spektrum
2
+ module Log
3
+
4
+ class Reader
5
+
6
+ attr_reader :records, :flights
7
+
8
+ def initialize filename
9
+ headers = []
10
+ headers_complete = false
11
+ records = []
12
+ @flights = []
13
+
14
+ File.open(filename, 'rb') do |file|
15
+ loop do
16
+ first4 = file.read(4)
17
+ if first4.nil?
18
+ if headers_complete || !records.empty?
19
+ # we have records, this is a new entry
20
+ @flights << Flight.new(headers, records)
21
+ headers = []
22
+ records = []
23
+ end
24
+ break
25
+ end
26
+
27
+ first = first4.unpack('V')[0]
28
+ if 0xFFFFFFFF == first
29
+
30
+ if headers_complete || !records.empty?
31
+ # we have records, this is a new entry
32
+ @flights << Flight.new(headers, records)
33
+ headers = []
34
+ records = []
35
+ headers_complete = false
36
+ end
37
+
38
+ rest = file.read(32)
39
+ headers << Headers.create(rest)
40
+
41
+ headers_complete = rest.unpack('S')[0] == 0x1717
42
+
43
+ else
44
+ type = file.read(1).unpack('C')[0]
45
+ rest = file.read(15)
46
+ records << Records.create(type, first, rest)
47
+ end
48
+ end
49
+ end
50
+
51
+ end
52
+
53
+ end
54
+
55
+ end
56
+ end
@@ -0,0 +1,231 @@
1
+ module Spektrum
2
+ module Log
3
+
4
+ class Record
5
+
6
+ attr_reader :timestamp
7
+
8
+ def initialize timestamp, raw_data
9
+ @timestamp = timestamp
10
+ @raw_data = raw_data
11
+ end
12
+
13
+ protected
14
+
15
+ def byte_field range
16
+ @raw_data[range].unpack('C')[0]
17
+ end
18
+
19
+ def hex_byte_field range
20
+ @raw_data[range].unpack('H*')[0].to_i
21
+ end
22
+
23
+ def two_byte_field range, endian = :big
24
+ @raw_data[range].unpack(endian == :big ? 'n' : 'v')[0]
25
+ end
26
+
27
+ def four_byte_field range, endian = :big
28
+ @raw_data[range].unpack(endian == :big ? 'N' : 'V')[0]
29
+ end
30
+
31
+ end
32
+
33
+ class AltimeterRecord < Record
34
+
35
+ def initialize timestamp, raw_data
36
+ super timestamp, raw_data
37
+ end
38
+
39
+ def altitude
40
+ two_byte_field(1..2)
41
+ end
42
+
43
+ end
44
+
45
+ class FlightLogRecord < Record
46
+
47
+ def initialize timestamp, raw_data
48
+ super timestamp, raw_data
49
+ end
50
+
51
+ def receiver_voltage
52
+ volt = two_byte_field(13..14)
53
+ volt / 100.0
54
+ end
55
+
56
+ end
57
+
58
+ class GForceRecord < Record
59
+
60
+ def initialize timestamp, raw_data
61
+ super timestamp, raw_data
62
+ end
63
+
64
+ def x
65
+ x = two_byte_field(1..2)
66
+ x
67
+ end
68
+
69
+ def y
70
+ y = two_byte_field(3..4)
71
+ y
72
+ end
73
+
74
+ def z
75
+ z = two_byte_field(5..6)
76
+ z
77
+ end
78
+
79
+ def x_max
80
+ x = two_byte_field(7..8)
81
+ x
82
+ end
83
+
84
+ def y_max
85
+ y = two_byte_field(9..10)
86
+ y
87
+ end
88
+
89
+ def z_max
90
+ z = two_byte_field(11..12)
91
+ z
92
+ end
93
+
94
+ end
95
+
96
+ class GPSRecord1 < Record
97
+
98
+ def initialize timestamp, raw_data
99
+ super timestamp, raw_data
100
+ end
101
+
102
+ def altitude
103
+ alt = two_byte_field(1..2, :little)
104
+ alt
105
+ end
106
+
107
+ def latitude
108
+ a = byte_field(3) # 1/100 degree-second
109
+ b = byte_field(4) # degree-seconds
110
+ c = byte_field(5) # degree-minutes
111
+ d = byte_field(6) # degrees
112
+ [d, c, b, a]
113
+ end
114
+
115
+ def longitude
116
+ a = byte_field(7) # 1/100 degree-second
117
+ b = byte_field(8) # degree-seconds
118
+ c = byte_field(9) # degree-minutes
119
+ d = byte_field(10) # degrees
120
+ [d, c, b, a]
121
+ end
122
+
123
+ def heading
124
+ head = two_byte_field(11..12, :little)
125
+ head / 10.0
126
+ end
127
+
128
+ end
129
+
130
+ class GPSRecord2 < Record
131
+
132
+ def initialize timestamp, raw_data
133
+ super timestamp, raw_data
134
+ end
135
+
136
+ # :knots, :mph, :kph
137
+ def speed unit = :knots
138
+ speed = two_byte_field(1..2, :little)
139
+ speed = case unit
140
+ when :knots
141
+ speed / 10.0
142
+ when :mph
143
+ speed * 0.115
144
+ when :kph
145
+ speed * 0.185
146
+ end
147
+ speed.round(2)
148
+ end
149
+
150
+ def time
151
+ ax = hex_byte_field(3) # hundredths
152
+ bx = hex_byte_field(4) # seconds
153
+ cx = hex_byte_field(5) # minutes
154
+ dx = hex_byte_field(6) # hours
155
+
156
+ [dx, cx, bx + (ax / 100.0)] # hh:mm:ss.sss
157
+ end
158
+
159
+ def sats
160
+ sats = byte_field(7)
161
+ sats
162
+ end
163
+
164
+ end
165
+
166
+ class MysteryRecord < Record
167
+
168
+ def initialize timestamp, raw_data
169
+ super timestamp, raw_data
170
+ end
171
+
172
+ end
173
+
174
+ class SpeedRecord < Record
175
+
176
+ def initialize timestamp, raw_data
177
+ super timestamp, raw_data
178
+ end
179
+
180
+ def speed
181
+ speed = two_byte_field(1..2)
182
+ speed
183
+ end
184
+
185
+ end
186
+
187
+ class VoltsTemperatureRPMRecord < Record
188
+
189
+ def initialize timestamp, raw_data
190
+ super timestamp, raw_data
191
+ end
192
+
193
+ def rpms pole_count
194
+ rpm = two_byte_field(1..2)
195
+ rpm * pole_count
196
+ end
197
+
198
+ def voltage
199
+ volt = two_byte_field(3..4)
200
+ volt / 100.0
201
+ end
202
+
203
+ def temperature
204
+ temp = two_byte_field(5..6)
205
+ temp
206
+ end
207
+
208
+ end
209
+
210
+ class Records
211
+
212
+ @@types = {
213
+ 0x11 => SpeedRecord,
214
+ 0x12 => AltimeterRecord,
215
+ 0x14 => GForceRecord,
216
+ 0x16 => GPSRecord1,
217
+ 0x17 => GPSRecord2,
218
+ 0x7E => VoltsTemperatureRPMRecord,
219
+ 0x7F => FlightLogRecord,
220
+ 0xFE => VoltsTemperatureRPMRecord,
221
+ 0xFF => FlightLogRecord,
222
+ }
223
+
224
+ def self.create type, timestamp, raw_data
225
+ @@types.fetch(type, MysteryRecord).new(timestamp, raw_data)
226
+ end
227
+
228
+ end
229
+
230
+ end
231
+ end
@@ -0,0 +1,5 @@
1
+ module Spektrum
2
+ module Log
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
@@ -0,0 +1,233 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spektrum::Log::Flight do
4
+
5
+ context 'data file 1.TLM' do
6
+
7
+ let(:reader) { Spektrum::Log::Reader.new(data_file('1.TLM')) }
8
+
9
+ context 'flight 1' do
10
+
11
+ subject { reader.flights[0] }
12
+
13
+ it { should have(4).headers }
14
+
15
+ it { should have(191).records }
16
+
17
+ its(:duration) { should eql(1148) }
18
+
19
+ its(:bind_type) { should eql('DSMX') }
20
+
21
+ its(:model_name) { should eql('Stinson') }
22
+
23
+ its(:model_number) { should eql(1) }
24
+
25
+ its(:model_type) { should eql('Fixed Wing') }
26
+
27
+ end
28
+
29
+ context 'flight 2' do
30
+
31
+ subject { reader.flights[1] }
32
+
33
+ it { should have(4).headers }
34
+
35
+ it { should have(634).records }
36
+
37
+ its(:duration) { should eql(3798) }
38
+
39
+ end
40
+
41
+ context 'flight 3' do
42
+
43
+ subject { reader.flights[2] }
44
+
45
+ it { should have(4).headers }
46
+
47
+ it { should have(641).records }
48
+
49
+ its(:duration) { should eql(3842) }
50
+
51
+ end
52
+
53
+ end
54
+
55
+ context 'data file 2.TLM' do
56
+
57
+ let(:reader) { Spektrum::Log::Reader.new(data_file('2.TLM')) }
58
+
59
+ context 'flight 1' do
60
+
61
+ subject { reader.flights[0] }
62
+
63
+ it { should have(5).headers }
64
+
65
+ it { should have(260).records }
66
+
67
+ its(:duration) { should eql(570) }
68
+
69
+ end
70
+
71
+ end
72
+
73
+ context 'data file 3.TLM' do
74
+
75
+ let(:reader) { Spektrum::Log::Reader.new(data_file('3.TLM')) }
76
+
77
+ context 'flight 1' do
78
+
79
+ subject { reader.flights[0] }
80
+
81
+ it { should have(5).headers }
82
+
83
+ it { should have(0).records }
84
+
85
+ its(:duration) { should eql(0) }
86
+
87
+ it { should be_empty }
88
+
89
+ end
90
+
91
+ context 'flight 2' do
92
+
93
+ subject { reader.flights[1] }
94
+
95
+ it { should have(5).headers }
96
+
97
+ it { should have(0).records }
98
+
99
+ its(:duration) { should eql(0) }
100
+
101
+ it { should be_empty }
102
+
103
+ end
104
+
105
+ context 'flight 3' do
106
+
107
+ subject { reader.flights[2] }
108
+
109
+ it { should have(5).headers }
110
+
111
+ it { should have(0).records }
112
+
113
+ its(:duration) { should eql(0) }
114
+
115
+ it { should be_empty }
116
+
117
+ end
118
+
119
+ context 'flight 4' do
120
+
121
+ subject { reader.flights[3] }
122
+
123
+ it { should have(5).headers }
124
+
125
+ it { should have(0).records }
126
+
127
+ its(:duration) { should eql(0) }
128
+
129
+ it { should be_empty }
130
+
131
+ end
132
+
133
+ context 'flight 5' do
134
+
135
+ subject { reader.flights[4] }
136
+
137
+ it { should have(5).headers }
138
+
139
+ it { should have(0).records }
140
+
141
+ its(:duration) { should eql(0) }
142
+
143
+ it { should be_empty }
144
+
145
+ end
146
+
147
+ context 'flight 6' do
148
+
149
+ subject { reader.flights[5] }
150
+
151
+ it { should have(5).headers }
152
+
153
+ it { should have(0).records }
154
+
155
+ its(:duration) { should eql(0) }
156
+
157
+ it { should be_empty }
158
+
159
+ end
160
+
161
+ context 'flight 7' do
162
+
163
+ subject { reader.flights[6] }
164
+
165
+ it { should have(5).headers }
166
+
167
+ it { should have(0).records }
168
+
169
+ its(:duration) { should eql(0) }
170
+
171
+ it { should be_empty }
172
+
173
+ end
174
+
175
+ context 'flight 8' do
176
+
177
+ subject { reader.flights[7] }
178
+
179
+ it { should have(5).headers }
180
+
181
+ it { should have(0).records }
182
+
183
+ its(:duration) { should eql(0) }
184
+
185
+ it { should be_empty }
186
+
187
+ end
188
+
189
+ context 'flight 9' do
190
+
191
+ subject { reader.flights[8] }
192
+
193
+ it { should have(5).headers }
194
+
195
+ it { should have(23155).records }
196
+
197
+ its(:duration) { should eql(148365) }
198
+
199
+ it { should_not be_empty }
200
+
201
+ end
202
+
203
+ end
204
+
205
+ context 'data file 4.TLM' do
206
+
207
+ let(:reader) { Spektrum::Log::Reader.new(data_file('4.TLM')) }
208
+
209
+ context 'flight 1' do
210
+
211
+ subject { reader.flights[0] }
212
+
213
+ it { should have(5).headers }
214
+
215
+ it { should have(5440).records }
216
+
217
+ it { should_not be_empty }
218
+
219
+ its(:duration) { should eql(16325) }
220
+
221
+ its(:bind_type) { should eql('DSMX') }
222
+
223
+ its(:model_name) { should eql('Goblin 700') }
224
+
225
+ its(:model_number) { should eql(5) }
226
+
227
+ its(:model_type) { should eql('Helicopter') }
228
+
229
+ end
230
+
231
+ end
232
+
233
+ end
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spektrum::Log::Reader do
4
+
5
+ context 'data file 1.TLM' do
6
+
7
+ subject { Spektrum::Log::Reader.new(data_file('1.TLM')) }
8
+
9
+ it { should have(3).flights }
10
+
11
+ end
12
+
13
+ context 'data file 2.TLM' do
14
+
15
+ subject { Spektrum::Log::Reader.new(data_file('2.TLM')) }
16
+
17
+ it { should have(312).flights }
18
+
19
+ end
20
+
21
+ context 'data file 3.TLM' do
22
+
23
+ subject { Spektrum::Log::Reader.new(data_file('3.TLM')) }
24
+
25
+ it { should have(12).flights }
26
+
27
+ end
28
+
29
+ context 'data file 4.TLM' do
30
+
31
+ subject { Spektrum::Log::Reader.new(data_file('4.TLM')) }
32
+
33
+ it { should have(1).flights }
34
+
35
+ end
36
+
37
+ end
@@ -0,0 +1,17 @@
1
+ require 'spektrum-log'
2
+
3
+ RSpec.configure do |config|
4
+ config.treat_symbols_as_metadata_keys_with_true_values = true
5
+ config.run_all_when_everything_filtered = true
6
+ config.filter_run :focus
7
+
8
+ # Run specs in random order to surface order dependencies. If you find an
9
+ # order dependency and want to debug it, you can fix the order by providing
10
+ # the seed, which is printed after each run.
11
+ # --seed 1234
12
+ config.order = 'random'
13
+ end
14
+
15
+ def data_file(name)
16
+ "#{File.dirname(__FILE__)}/../data/#{name}"
17
+ end
@@ -0,0 +1,20 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/spektrum-log/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Nick Veys"]
6
+ gem.email = ["nveys@aramisgroup.com"]
7
+ gem.description = %q{Read and interpret Spektrum TLM log files.}
8
+ gem.summary = %q{Spektrum TLM log file reader}
9
+ gem.homepage = ""
10
+
11
+ gem.files = `git ls-files`.split($\)
12
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
+ gem.name = "spektrum-log"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = Spektrum::Log::VERSION
17
+
18
+ gem.add_development_dependency 'rspec', '~> 2.12'
19
+ gem.add_development_dependency 'rake', '~> 10.0'
20
+ end
metadata ADDED
@@ -0,0 +1,95 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: spektrum-log
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Nick Veys
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-05-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '2.12'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '2.12'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ description: Read and interpret Spektrum TLM log files.
42
+ email:
43
+ - nveys@aramisgroup.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - .gitignore
49
+ - .rspec
50
+ - .travis.yml
51
+ - Gemfile
52
+ - LICENSE
53
+ - README.md
54
+ - Rakefile
55
+ - data/1.TLM
56
+ - data/2.TLM
57
+ - data/3.TLM
58
+ - data/4.TLM
59
+ - lib/spektrum-log.rb
60
+ - lib/spektrum-log/flight.rb
61
+ - lib/spektrum-log/headers.rb
62
+ - lib/spektrum-log/reader.rb
63
+ - lib/spektrum-log/records.rb
64
+ - lib/spektrum-log/version.rb
65
+ - spec/flight_spec.rb
66
+ - spec/reader_spec.rb
67
+ - spec/spec_helper.rb
68
+ - spektrum-log.gemspec
69
+ homepage: ''
70
+ licenses: []
71
+ metadata: {}
72
+ post_install_message:
73
+ rdoc_options: []
74
+ require_paths:
75
+ - lib
76
+ required_ruby_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ! '>='
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ required_rubygems_version: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ requirements: []
87
+ rubyforge_project:
88
+ rubygems_version: 2.0.3
89
+ signing_key:
90
+ specification_version: 4
91
+ summary: Spektrum TLM log file reader
92
+ test_files:
93
+ - spec/flight_spec.rb
94
+ - spec/reader_spec.rb
95
+ - spec/spec_helper.rb