Class: EagleTree::Log::Session

Inherits:
Object
  • Object
show all
Defined in:
lib/eagletree/log/session.rb

Overview

Represents an individual recording session.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(number, range) ⇒ Session

Returns a new instance of Session.



18
19
20
21
# File 'lib/eagletree/log/session.rb', line 18

def initialize number, range
  @number = number
  @range = range
end

Instance Attribute Details

#numberFixnum (readonly)

Returns this sessions number in the data file.

Returns:

  • (Fixnum)

    this sessions number in the data file



10
11
12
# File 'lib/eagletree/log/session.rb', line 10

def number
  @number
end

#rangeArray<Fixnum> (readonly)

Returns range of entries timestamps for this session.

Returns:

  • (Array<Fixnum>)

    range of entries timestamps for this session



13
14
15
# File 'lib/eagletree/log/session.rb', line 13

def range
  @range
end

#rowsArray

Returns rows of raw data from session.

Returns:

  • (Array)

    rows of raw data from session



16
17
18
# File 'lib/eagletree/log/session.rb', line 16

def rows
  @rows
end

Instance Method Details

#airspeeds(unit = :mph) ⇒ Float

Gets the air speed (Pitot), in the desired unit.

Parameters:

  • unit (defaults to: :mph)

    one of :knots, :mph, :kph to define desired unit

Returns:

  • (Float)

    speed in the desired unit



54
55
56
# File 'lib/eagletree/log/session.rb', line 54

def airspeeds(unit = :mph)
  @airspeeds ||= float_fields('Airspeed')
end

#airspeeds?Boolean

Returns:

  • (Boolean)


58
59
60
# File 'lib/eagletree/log/session.rb', line 58

def airspeeds?
  nonzero?(airspeeds)
end

#altitudesObject



42
43
44
# File 'lib/eagletree/log/session.rb', line 42

def altitudes
  @altitudes ||= int_fields('Altitude')
end

#altitudes?Boolean

Returns:

  • (Boolean)


46
47
48
# File 'lib/eagletree/log/session.rb', line 46

def altitudes?
  nonzero?(altitudes)
end

#ampsObject



86
87
88
# File 'lib/eagletree/log/session.rb', line 86

def amps
  @amps ||= float_fields('Amps*100').map { |val| val / 100.0 }
end

#amps?Boolean

Returns:

  • (Boolean)


90
91
92
# File 'lib/eagletree/log/session.rb', line 90

def amps?
  nonzero?(amps)
end

#coordsObject



186
187
188
# File 'lib/eagletree/log/session.rb', line 186

def coords
  @coords ||= longitudes.zip(latitudes, gps_altitudes, gps_courses)
end

#coords?Boolean

Returns:

  • (Boolean)


190
191
192
# File 'lib/eagletree/log/session.rb', line 190

def coords?
  longitudes? || latitudes? || gps_altitudes? || gps_courses?
end

#durationFloat

Gets the duration of the session, in seconds.

Returns:

  • (Float)

    duration of the session, in seconds



30
31
32
# File 'lib/eagletree/log/session.rb', line 30

def duration
  @duration ||= (range[1] - range[0]) / 1000.0
end

#gps_altitudesObject



150
151
152
# File 'lib/eagletree/log/session.rb', line 150

def gps_altitudes
  @gps_altitudes ||= float_fields('GPSAlt')
end

#gps_altitudes?Boolean

Returns:

  • (Boolean)


154
155
156
# File 'lib/eagletree/log/session.rb', line 154

def gps_altitudes?
  nonzero?(gps_altitudes)
end

#gps_coursesObject



170
171
172
# File 'lib/eagletree/log/session.rb', line 170

def gps_courses
  @gps_courses ||= float_fields('GPSCourse')
end

#gps_courses?Boolean

Returns:

  • (Boolean)


174
175
176
# File 'lib/eagletree/log/session.rb', line 174

def gps_courses?
  nonzero?(gps_courses)
end

#gps_satellitesObject



178
179
180
# File 'lib/eagletree/log/session.rb', line 178

def gps_satellites
  @gps_satellites ||= int_fields('NumSats')
end

#gps_satellites?Boolean

Returns:

  • (Boolean)


182
183
184
# File 'lib/eagletree/log/session.rb', line 182

def gps_satellites?
  nonzero?(gps_satellites)
end

#gps_speeds(unit = :mph) ⇒ Float

Gets the ground speed (GPS), in the desired unit.

Parameters:

  • unit (defaults to: :mph)

    one of :knots, :mph, :kph to define desired unit

Returns:

  • (Float)

    speed in the desired unit



162
163
164
# File 'lib/eagletree/log/session.rb', line 162

def gps_speeds(unit = :mph)
  @gps_speeds ||= float_fields('GPSSpeed')
end

#gps_speeds?Boolean

Returns:

  • (Boolean)


166
167
168
# File 'lib/eagletree/log/session.rb', line 166

def gps_speeds?
  nonzero?(gps_speeds)
end

#latitudesObject



134
135
136
# File 'lib/eagletree/log/session.rb', line 134

def latitudes
  @latitudes ||= float_fields('GPSLat')
end

#latitudes?Boolean

Returns:

  • (Boolean)


138
139
140
# File 'lib/eagletree/log/session.rb', line 138

def latitudes?
  nonzero?(latitudes)
end

#longitudesObject



142
143
144
# File 'lib/eagletree/log/session.rb', line 142

def longitudes
  @longitudes ||= float_fields('GPSLon')
end

#longitudes?Boolean

Returns:

  • (Boolean)


146
147
148
# File 'lib/eagletree/log/session.rb', line 146

def longitudes?
  nonzero?(longitudes)
end

#millisecondsObject



34
35
36
# File 'lib/eagletree/log/session.rb', line 34

def milliseconds
  @milliseconds ||= int_fields('Milliseconds')
end

#milliseconds?Boolean

Returns:

  • (Boolean)


38
39
40
# File 'lib/eagletree/log/session.rb', line 38

def milliseconds?
  nonzero?(milliseconds)
end

#pack_voltagesObject



78
79
80
# File 'lib/eagletree/log/session.rb', line 78

def pack_voltages
  @pack_voltages ||= float_fields('PackVolt*100').map { |val| val / 100.0 }
end

#pack_voltages?Boolean

Returns:

  • (Boolean)


82
83
84
# File 'lib/eagletree/log/session.rb', line 82

def pack_voltages?
  nonzero?(pack_voltages)
end

#rpmsObject



118
119
120
# File 'lib/eagletree/log/session.rb', line 118

def rpms
  @rpms ||= int_fields('RPM')
end

#rpms2Object



126
127
128
# File 'lib/eagletree/log/session.rb', line 126

def rpms2
  @rpms2 ||= int_fields('RPM2')
end

#rpms2?Boolean

Returns:

  • (Boolean)


130
131
132
# File 'lib/eagletree/log/session.rb', line 130

def rpms2?
  nonzero?(rpms2)
end

#rpms?Boolean

Returns:

  • (Boolean)


122
123
124
# File 'lib/eagletree/log/session.rb', line 122

def rpms?
  nonzero?(rpms)
end

#servo_currentsObject



62
63
64
# File 'lib/eagletree/log/session.rb', line 62

def servo_currents
  @servo_currents ||= float_fields('ServoCurrent*100').map { |val| val / 100.0 }
end

#servo_currents?Boolean

Returns:

  • (Boolean)


66
67
68
# File 'lib/eagletree/log/session.rb', line 66

def servo_currents?
  nonzero?(servo_currents)
end

#temps1Object



94
95
96
# File 'lib/eagletree/log/session.rb', line 94

def temps1
  @temps1 ||= float_fields('Temp1*10').map { |val| val / 10.0 }
end

#temps1?Boolean

Returns:

  • (Boolean)


98
99
100
# File 'lib/eagletree/log/session.rb', line 98

def temps1?
  nonzero?(temps1)
end

#temps2Object



102
103
104
# File 'lib/eagletree/log/session.rb', line 102

def temps2
  @temps2 ||= float_fields('Temp2*10').map { |val| val / 10.0 }
end

#temps2?Boolean

Returns:

  • (Boolean)


106
107
108
# File 'lib/eagletree/log/session.rb', line 106

def temps2?
  nonzero?(temps2)
end

#temps3Object



110
111
112
# File 'lib/eagletree/log/session.rb', line 110

def temps3
  @temps3 ||= float_fields('Temp3*10').map { |val| val / 10.0 }
end

#temps3?Boolean

Returns:

  • (Boolean)


114
115
116
# File 'lib/eagletree/log/session.rb', line 114

def temps3?
  nonzero?(temps3)
end

#throttlesObject



70
71
72
# File 'lib/eagletree/log/session.rb', line 70

def throttles
  @throttles ||= int_fields('Throttle')
end

#throttles?Boolean

Returns:

  • (Boolean)


74
75
76
# File 'lib/eagletree/log/session.rb', line 74

def throttles?
  nonzero?(throttles)
end

#to_kml(file_options = {}, placemark_options = {}) ⇒ String

Converts the session into a KML document containing a placemark.

Parameters:

  • file_options (Hash) (defaults to: {})

    hash containing options for file

  • placemark_options (Hash) (defaults to: {})

    hash containing options for placemark

Returns:

  • (String)

    KML document for the session

Raises:

  • (RuntimeError)

See Also:



208
209
210
211
# File 'lib/eagletree/log/session.rb', line 208

def to_kml(file_options = {}, placemark_options = {})
  raise RuntimeError, 'No coordinates available for KML generation' unless to_kml?
  to_kml_file(file_options, placemark_options).render
end

#to_kml?Boolean

Determines if KML methods can be called for this session.

Returns:

  • (Boolean)

    true if KML can be generated for this session, false otherwise



197
198
199
# File 'lib/eagletree/log/session.rb', line 197

def to_kml?
  coords?
end

#to_kml_file(file_options = {}, placemark_options = {}) ⇒ KMLFile

Converts the session into a KMLFile containing a placemark.

Parameters:

  • file_options (Hash) (defaults to: {})

    hash containing options for file

  • placemark_options (Hash) (defaults to: {})

    hash containing options for placemark

Options Hash (file_options):

  • :name (String)

    name option of KML::Document

  • :description (String)

    name option of KML::Document

  • :style_id (String)

    id option of KML::Style

Returns:

  • (KMLFile)

    file for the session

Raises:

  • (RuntimeError)

See Also:



222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
# File 'lib/eagletree/log/session.rb', line 222

def to_kml_file(file_options = {}, placemark_options = {})
  raise RuntimeError, 'No coordinates available for KML generation' unless to_kml?
  options = apply_default_file_options(file_options)

  kml = KMLFile.new
  kml.objects << KML::Document.new(
    :name => options[:name],
    :description => options[:description],
    :styles => [
      KML::Style.new(
        :id => options[:style_id],
        :line_style => KML::LineStyle.new(:color => '7F00FFFF', :width => 4),
        :poly_style => KML::PolyStyle.new(:color => '7F00FF00')
      )
    ],
    :features => [ to_kml_placemark(placemark_options) ]
  )
  kml
end

#to_kml_placemark(options = {}) ⇒ KML::Placemark

Converts the session into a KML::Placemark containing GPS coordinates.

Parameters:

  • options (Hash) (defaults to: {})

    hash containing options for placemark

Options Hash (options):

  • :altitude_mode (String)

    altitude_mode option of KML::LineString

  • :extrude (Boolean)

    extrude option of KML::LineString

  • :name (String)

    name option of KML::Placemark

  • :style_url (String)

    style_url option of KML::Placemark

  • :tessellate (Boolean)

    tessellate option of KML::LineString

Returns:

  • (KML::Placemark)

    placemark for the session

Raises:

  • (RuntimeError)


251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
# File 'lib/eagletree/log/session.rb', line 251

def to_kml_placemark(options = {})
  raise RuntimeError, 'No coordinates available for KML generation' unless to_kml?
  options = apply_default_placemark_options(options)

  KML::Placemark.new(
    :name => options[:name],
    :style_url => options[:style_url],
    :geometry => KML::LineString.new(
      :altitude_mode => options[:altitude_mode],
      :extrude => options[:extrude],
      :tessellate => options[:tessellate],
      :coordinates => coords.map { |c| c.join(',') }.join(' ')
    )
  )
end