mavlink-log 0.0.1 → 0.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 (42) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -0
  3. data/lib/mavlink/log.rb +5 -1
  4. data/lib/mavlink/log/entry.rb +34 -0
  5. data/lib/mavlink/log/file.rb +16 -41
  6. data/lib/mavlink/log/header.rb +20 -0
  7. data/lib/mavlink/log/message.rb +83 -0
  8. data/lib/mavlink/log/messages/attitude.rb +37 -0
  9. data/lib/mavlink/log/messages/factory.rb +37 -0
  10. data/lib/mavlink/log/messages/global_position_int.rb +47 -0
  11. data/lib/mavlink/log/messages/gps_raw_int.rb +51 -0
  12. data/lib/mavlink/log/messages/heart_beat.rb +31 -0
  13. data/lib/mavlink/log/messages/messages.rb +15 -0
  14. data/lib/mavlink/log/messages/mission_current.rb +11 -0
  15. data/lib/mavlink/log/messages/nav_controller_output.rb +39 -0
  16. data/lib/mavlink/log/messages/param_request_list.rb +15 -0
  17. data/lib/mavlink/log/messages/param_value.rb +27 -0
  18. data/lib/mavlink/log/messages/raw_imu.rb +43 -0
  19. data/lib/mavlink/log/messages/rc_channels_raw.rb +47 -0
  20. data/lib/mavlink/log/messages/request_data_stream.rb +27 -0
  21. data/lib/mavlink/log/messages/scaled_pressure.rb +19 -0
  22. data/lib/mavlink/log/messages/servo_output_raw.rb +43 -0
  23. data/lib/mavlink/log/messages/sys_status.rb +64 -0
  24. data/lib/mavlink/log/messages/vfr_hud.rb +37 -0
  25. data/lib/mavlink/log/version.rb +1 -1
  26. data/spec/file_spec.rb +11 -1
  27. data/spec/messages/attitude_spec.rb +34 -0
  28. data/spec/messages/global_position_int_spec.rb +38 -0
  29. data/spec/messages/gps_raw_int_spec.rb +40 -0
  30. data/spec/messages/heart_beat_spec.rb +32 -0
  31. data/spec/messages/param_value_spec.rb +30 -0
  32. data/spec/messages/raw_imu_spec.rb +40 -0
  33. data/spec/messages/rc_channels_raw_spec.rb +42 -0
  34. data/spec/messages/sys_status_spec.rb +46 -0
  35. data/spec/messages/vfr_hud_spec.rb +32 -0
  36. data/spec/spec_helper.rb +2 -0
  37. data/spec/support/shared_examples_for_message.rb +13 -0
  38. data/spec/support/shared_examples_for_timed_message_micro.rb +9 -0
  39. data/spec/support/shared_examples_for_timed_message_milli.rb +9 -0
  40. data/spec/sys_status_spec.rb +0 -0
  41. metadata +48 -3
  42. data/lib/mavlink/log/messages.rb +0 -138
@@ -1,138 +0,0 @@
1
- module MAVLink
2
- module Log
3
-
4
- class Message
5
-
6
- class << self
7
- attr_accessor :id
8
- end
9
-
10
- end
11
-
12
- class TimedMessage < Message
13
-
14
- attr_accessor :time_boot_ms
15
-
16
- def initialize(raw_payload)
17
- @time_boot_ms = raw_payload[0..3].unpack('L<')[0]
18
- end
19
-
20
- end
21
-
22
- class HeartBeat < Message
23
-
24
- ID = 0
25
-
26
- attr_accessor :type, :autopilot, :base_mode, :custom_mode, :system_status, :mavlink_version
27
-
28
- def initialize(raw_payload)
29
- @type = raw_payload[0].unpack('C')[0]
30
- @autopilot = raw_payload[1].unpack('C')[0]
31
- @base_mode = raw_payload[2].unpack('C')[0]
32
- @custom_mode = raw_payload[3..6].unpack('L<')[0]
33
- @system_status = raw_payload[7].unpack('C')[0]
34
- @mavlink_version = raw_payload[8].unpack('C')[0]
35
- end
36
-
37
- end
38
-
39
- class SysStatus < Message
40
-
41
- ID = 1
42
-
43
- attr_accessor :onboard_control_sensors_present, :onboard_control_sensors_enabled,
44
- :onboard_control_sensors_health, :load, :voltage_battery, :current_battery,
45
- :battery_remaining, :drop_rate_comm, :errors_comm,
46
- :errors_count1, :errors_count2, :errors_count3, :errors_count4
47
-
48
- def initialize(raw_payload)
49
- @onboard_control_sensors_present = raw_payload[0..3].unpack('L<')[0] #
50
- @onboard_control_sensors_enabled = raw_payload[4..7].unpack('L<')[0] #
51
- @onboard_control_sensors_health = raw_payload[8..11].unpack('L<')[0] #
52
- @load = raw_payload[12..13].unpack('S<')[0] / 10.0 # 0%..100%
53
- @voltage_battery = raw_payload[14..15].unpack('S<')[0] / 1000.0 # V
54
- @current_battery = raw_payload[16..17].unpack('s<')[0] / 100.0 # A (-1: not measured)
55
- @battery_remaining = raw_payload[18].unpack('C')[0] # 0%..100% (-1: not measured)
56
- @drop_rate_comm = raw_payload[19..20].unpack('S<')[0] / 100 # 0%..100% (bad packet %age)
57
- @errors_comm = raw_payload[21..22].unpack('S<')[0] # bad packet count
58
- @errors_count1 = raw_payload[23..24].unpack('S<')[0] #
59
- @errors_count2 = raw_payload[25..26].unpack('S<')[0] #
60
- @errors_count3 = raw_payload[27..28].unpack('S<')[0] #
61
- @errors_count4 = raw_payload[29..30].unpack('S<')[0] #
62
- end
63
-
64
- end
65
-
66
- class Attitude < TimedMessage
67
-
68
- ID = 30
69
-
70
- attr_accessor :roll, :pitch, :yaw, :rollspeed, :pitchspeed, :yawspeed
71
-
72
- def initialize(raw_payload)
73
- super
74
- @roll = raw_payload[0..3].unpack('e')[0] # radians (-pi..pi)
75
- @pitch = raw_payload[4..7].unpack('e')[0] # radians (-pi..pi)
76
- @yaw = raw_payload[8..11].unpack('e')[0] # radians (-pi..pi)
77
- @rollspeed = raw_payload[12..15].unpack('e')[0] # rad/s
78
- @pitchspeed = raw_payload[16..19].unpack('e')[0] # rad/s
79
- @yawspeed = raw_payload[20..23].unpack('e')[0] # rad/s
80
- end
81
- end
82
-
83
- class GlobalPositionInt < TimedMessage
84
-
85
- ID = 33
86
-
87
- attr_accessor :lat, :lon, :alt, :relative_alt, :vx, :vy, :vz, :hdg
88
-
89
- def initialize(raw_payload)
90
- super
91
- @lat = raw_payload[4..7].unpack('l<')[0] / 10000000.0 # dec. degrees
92
- @lon = raw_payload[8..11].unpack('l<')[0] / 10000000.0 # dec. degrees
93
- @alt = raw_payload[12..15].unpack('l<')[0] / 1000.0 # meters
94
- @relative_alt = raw_payload[16..19].unpack('l<')[0] / 1000.0 # meters
95
- @vx = raw_payload[20..21].unpack('s<')[0] / 100.0 # m/s
96
- @vy = raw_payload[22..23].unpack('s<')[0] / 100.0 # m/s
97
- @vz = raw_payload[24..25].unpack('s<')[0] / 100.0 # m/s
98
- @hdg = raw_payload[26..27].unpack('S<')[0] / 100.0 # degrees (0.0..359.99) (0xFFFF if unknown)
99
- end
100
-
101
- end
102
-
103
- class VfrHud < Message
104
-
105
- ID = 74
106
-
107
- attr_accessor :airspeed, :groundspeed, :heading, :throttle, :alt, :climb
108
-
109
- def initialize(raw_payload)
110
- @airspeed = raw_payload[0..3].unpack('e')[0] # m/s
111
- @groundspeed = raw_payload[4..7].unpack('e')[0] # m/s
112
- @heading = raw_payload[8..9].unpack('s<')[0] # degrees (0..360)
113
- @throttle = raw_payload[10..11].unpack('S<')[0] # 0..100%
114
- @alt = raw_payload[12..15].unpack('e')[0] # meters (MSL)
115
- @climb = raw_payload[16..19].unpack('e')[0] # m/s
116
- end
117
-
118
- end
119
-
120
- class MessageFactory
121
-
122
- def self.build(entry)
123
- case(entry.header.id)
124
- when HeartBeat::ID; HeartBeat.new(entry.payload)
125
- when SysStatus::ID; SysStatus.new(entry.payload)
126
- when Attitude::ID; Attitude.new(entry.payload)
127
- when GlobalPositionInt::ID; GlobalPositionInt.new(entry.payload)
128
- when VfrHud::ID; VfrHud.new(entry.payload)
129
- else
130
- #puts entry.header.inspect
131
- nil
132
- end
133
- end
134
-
135
- end
136
-
137
- end
138
- end