cosmos-unpacking_interface 1.0.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.
Files changed (84) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.travis.yml +7 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +21 -0
  6. data/README.md +158 -0
  7. data/Rakefile +12 -0
  8. data/bin/console +14 -0
  9. data/bin/setup +8 -0
  10. data/config/data/README.txt +1 -0
  11. data/config/data/crc.txt +198 -0
  12. data/config/system/system.txt +29 -0
  13. data/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -0
  14. data/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -0
  15. data/config/targets/COSMOS/cmd_tlm_server.txt +6 -0
  16. data/config/targets/COSMOS/screens/limits_change.txt +20 -0
  17. data/config/targets/COSMOS/screens/version.txt +19 -0
  18. data/config/targets/COSMOS/target.txt +9 -0
  19. data/config/targets/PI/cmd_tlm/pi_tlm_test.txt +12 -0
  20. data/config/targets/PI/cmd_tlm/pi_tlm_test_1.txt +13 -0
  21. data/config/targets/PI/cmd_tlm/pi_tlm_test_2.txt +68 -0
  22. data/config/targets/PI/cmd_tlm/pi_tlm_test_3.txt +12 -0
  23. data/config/targets/PI/cmd_tlm_server.txt +4 -0
  24. data/config/targets/PI/target.txt +4 -0
  25. data/cosmos-unpacking_interface.gemspec +34 -0
  26. data/doc/Cosmos.html +98 -0
  27. data/doc/Cosmos/AggregatePacketMapper.html +152 -0
  28. data/doc/Cosmos/AggregatePacketProcesser.html +249 -0
  29. data/doc/Cosmos/BaseNameMap.html +364 -0
  30. data/doc/Cosmos/UnpackingInterface.html +399 -0
  31. data/doc/UnpackingInterface.html +110 -0
  32. data/doc/created.rid +7 -0
  33. data/doc/css/fonts.css +167 -0
  34. data/doc/css/rdoc.css +590 -0
  35. data/doc/fonts/Lato-Light.ttf +0 -0
  36. data/doc/fonts/Lato-LightItalic.ttf +0 -0
  37. data/doc/fonts/Lato-Regular.ttf +0 -0
  38. data/doc/fonts/Lato-RegularItalic.ttf +0 -0
  39. data/doc/fonts/SourceCodePro-Bold.ttf +0 -0
  40. data/doc/fonts/SourceCodePro-Regular.ttf +0 -0
  41. data/doc/images/add.png +0 -0
  42. data/doc/images/arrow_up.png +0 -0
  43. data/doc/images/brick.png +0 -0
  44. data/doc/images/brick_link.png +0 -0
  45. data/doc/images/bug.png +0 -0
  46. data/doc/images/bullet_black.png +0 -0
  47. data/doc/images/bullet_toggle_minus.png +0 -0
  48. data/doc/images/bullet_toggle_plus.png +0 -0
  49. data/doc/images/date.png +0 -0
  50. data/doc/images/delete.png +0 -0
  51. data/doc/images/find.png +0 -0
  52. data/doc/images/loadingAnimation.gif +0 -0
  53. data/doc/images/macFFBgHack.png +0 -0
  54. data/doc/images/package.png +0 -0
  55. data/doc/images/page_green.png +0 -0
  56. data/doc/images/page_white_text.png +0 -0
  57. data/doc/images/page_white_width.png +0 -0
  58. data/doc/images/plugin.png +0 -0
  59. data/doc/images/ruby.png +0 -0
  60. data/doc/images/tag_blue.png +0 -0
  61. data/doc/images/tag_green.png +0 -0
  62. data/doc/images/transparent.png +0 -0
  63. data/doc/images/wrench.png +0 -0
  64. data/doc/images/wrench_orange.png +0 -0
  65. data/doc/images/zoom.png +0 -0
  66. data/doc/index.html +91 -0
  67. data/doc/js/darkfish.js +161 -0
  68. data/doc/js/jquery.js +4 -0
  69. data/doc/js/navigation.js +141 -0
  70. data/doc/js/navigation.js.gz +0 -0
  71. data/doc/js/search.js +109 -0
  72. data/doc/js/search_index.js +1 -0
  73. data/doc/js/search_index.js.gz +0 -0
  74. data/doc/js/searcher.js +229 -0
  75. data/doc/js/searcher.js.gz +0 -0
  76. data/doc/lib/README_rdoc.html +118 -0
  77. data/doc/table_of_contents.html +140 -0
  78. data/lib/cosmos/unpacking_interface.rb +14 -0
  79. data/lib/cosmos/unpacking_interface/aggregate_packet_mapper.rb +14 -0
  80. data/lib/cosmos/unpacking_interface/aggregate_packet_processor.rb +42 -0
  81. data/lib/cosmos/unpacking_interface/base_name_map.rb +67 -0
  82. data/lib/cosmos/unpacking_interface/unpacking_interface.rb +87 -0
  83. data/lib/cosmos/unpacking_interface/version.rb +3 -0
  84. metadata +174 -0
@@ -0,0 +1,140 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html>
4
+ <head>
5
+ <meta charset="UTF-8">
6
+
7
+ <title>Table of Contents - RDoc Documentation</title>
8
+
9
+ <script type="text/javascript">
10
+ var rdoc_rel_prefix = "./";
11
+ var index_rel_prefix = "./";
12
+ </script>
13
+
14
+ <script src="./js/jquery.js"></script>
15
+ <script src="./js/darkfish.js"></script>
16
+
17
+ <link href="./css/fonts.css" rel="stylesheet">
18
+ <link href="./css/rdoc.css" rel="stylesheet">
19
+
20
+
21
+
22
+ <body id="top" class="table-of-contents">
23
+ <main role="main">
24
+ <h1 class="class">Table of Contents - RDoc Documentation</h1>
25
+
26
+
27
+ <h2 id="classes">Classes and Modules</h2>
28
+ <ul>
29
+ <li class="module">
30
+ <a href="Cosmos.html">Cosmos</a>
31
+ </li>
32
+ <li class="class">
33
+ <a href="Cosmos/AggregatePacketMapper.html">Cosmos::AggregatePacketMapper</a>
34
+ </li>
35
+ <li class="class">
36
+ <a href="Cosmos/AggregatePacketProcesser.html">Cosmos::AggregatePacketProcesser</a>
37
+ </li>
38
+ <li class="class">
39
+ <a href="Cosmos/BaseNameMap.html">Cosmos::BaseNameMap</a>
40
+ </li>
41
+ <li class="class">
42
+ <a href="Cosmos/UnpackingInterface.html">Cosmos::UnpackingInterface</a>
43
+ </li>
44
+ <li class="module">
45
+ <a href="UnpackingInterface.html">UnpackingInterface</a>
46
+ </li>
47
+ </ul>
48
+
49
+ <h2 id="methods">Methods</h2>
50
+ <ul>
51
+
52
+ <li class="method">
53
+ <a href="Cosmos/AggregatePacketProcesser.html#method-c-new">::new</a>
54
+ &mdash;
55
+ <span class="container">Cosmos::AggregatePacketProcesser</span>
56
+
57
+ <li class="method">
58
+ <a href="Cosmos/BaseNameMap.html#method-c-new">::new</a>
59
+ &mdash;
60
+ <span class="container">Cosmos::BaseNameMap</span>
61
+
62
+ <li class="method">
63
+ <a href="Cosmos/AggregatePacketProcesser.html#method-i-_extract_map">#_extract_map</a>
64
+ &mdash;
65
+ <span class="container">Cosmos::AggregatePacketProcesser</span>
66
+
67
+ <li class="method">
68
+ <a href="Cosmos/BaseNameMap.html#method-i-_field_arity">#_field_arity</a>
69
+ &mdash;
70
+ <span class="container">Cosmos::BaseNameMap</span>
71
+
72
+ <li class="method">
73
+ <a href="Cosmos/BaseNameMap.html#method-i-_max_arity">#_max_arity</a>
74
+ &mdash;
75
+ <span class="container">Cosmos::BaseNameMap</span>
76
+
77
+ <li class="method">
78
+ <a href="Cosmos/UnpackingInterface.html#method-i-agg_pkt_map">#agg_pkt_map</a>
79
+ &mdash;
80
+ <span class="container">Cosmos::UnpackingInterface</span>
81
+
82
+ <li class="method">
83
+ <a href="Cosmos/AggregatePacketMapper.html#method-i-build_map">#build_map</a>
84
+ &mdash;
85
+ <span class="container">Cosmos::AggregatePacketMapper</span>
86
+
87
+ <li class="method">
88
+ <a href="Cosmos/UnpackingInterface.html#method-i-connect">#connect</a>
89
+ &mdash;
90
+ <span class="container">Cosmos::UnpackingInterface</span>
91
+
92
+ <li class="method">
93
+ <a href="Cosmos/BaseNameMap.html#method-i-extract_all">#extract_all</a>
94
+ &mdash;
95
+ <span class="container">Cosmos::BaseNameMap</span>
96
+
97
+ <li class="method">
98
+ <a href="Cosmos/UnpackingInterface.html#method-i-packet_mapper">#packet_mapper</a>
99
+ &mdash;
100
+ <span class="container">Cosmos::UnpackingInterface</span>
101
+
102
+ <li class="method">
103
+ <a href="Cosmos/UnpackingInterface.html#method-i-process">#process</a>
104
+ &mdash;
105
+ <span class="container">Cosmos::UnpackingInterface</span>
106
+
107
+ <li class="method">
108
+ <a href="Cosmos/UnpackingInterface.html#method-i-read">#read</a>
109
+ &mdash;
110
+ <span class="container">Cosmos::UnpackingInterface</span>
111
+
112
+ <li class="method">
113
+ <a href="Cosmos/BaseNameMap.html#method-i-size">#size</a>
114
+ &mdash;
115
+ <span class="container">Cosmos::BaseNameMap</span>
116
+
117
+ <li class="method">
118
+ <a href="Cosmos/UnpackingInterface.html#method-i-target">#target</a>
119
+ &mdash;
120
+ <span class="container">Cosmos::UnpackingInterface</span>
121
+
122
+ <li class="method">
123
+ <a href="Cosmos/UnpackingInterface.html#method-i-transforms">#transforms</a>
124
+ &mdash;
125
+ <span class="container">Cosmos::UnpackingInterface</span>
126
+
127
+ <li class="method">
128
+ <a href="Cosmos/AggregatePacketProcesser.html#method-i-unpack">#unpack</a>
129
+ &mdash;
130
+ <span class="container">Cosmos::AggregatePacketProcesser</span>
131
+ </ul>
132
+ </main>
133
+
134
+
135
+ <footer id="validator-badges" role="contentinfo">
136
+ <p><a href="https://validator.w3.org/check/referer">Validate</a>
137
+ <p>Generated by <a href="https://ruby.github.io/rdoc/">RDoc</a> 6.1.1.
138
+ <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
139
+ </footer>
140
+
@@ -0,0 +1,14 @@
1
+ require "cosmos/unpacking_interface/version"
2
+ ##
3
+ # A custom extendable interface that unpacks aggregate packets (packets with many granules) into many
4
+ # simple packets (packets with a single granule). This way we can use all the cosmos niceties
5
+ # without having to send packets for individual measurements. Essentially we unpack an aggregate
6
+ # packet into many packets that are stored in a queue that is read from. When the queue is empty
7
+ # we look for new aggregate packets
8
+ module UnpackingInterface
9
+ end
10
+
11
+ require "cosmos/unpacking_interface/base_name_map"
12
+ require "cosmos/unpacking_interface/aggregate_packet_mapper"
13
+ require "cosmos/unpacking_interface/aggregate_packet_processor"
14
+ require "cosmos/unpacking_interface/unpacking_interface"
@@ -0,0 +1,14 @@
1
+ ##
2
+ # Encapsulates the conversion of an aggregate packet into a BaseNameMap, our
3
+ # internal representation of the fields in an aggregate packet
4
+
5
+ module Cosmos
6
+ class AggregatePacketMapper
7
+
8
+ ##
9
+ # Builds a BaseNameMap from a cosmos aggregate packet
10
+ def build_map(packet)
11
+ BaseNameMap.new({}, packet.packet_name)
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,42 @@
1
+
2
+ module Cosmos
3
+
4
+ ##
5
+ # Encapsulates the transformation of an aggregate packet into many simple packets
6
+ class AggregatePacketProcesser
7
+
8
+ def initialize(mapper, transforms = {})
9
+ @mapper = mapper
10
+ @transforms = transforms
11
+ end
12
+
13
+ ##
14
+ # Converts the aggregate packet into an array of simple packets.
15
+ def unpack(packet, target, item)
16
+ values_map = @mapper.build_map(packet) #
17
+ _extract_map(values_map, target, item)
18
+ end
19
+
20
+ ##
21
+ # Extract our internal BaseNameMap into an array of packets of type target/item, applying
22
+ # transformations if applicable
23
+ def _extract_map(map, target, item)
24
+ map.extract_all.each_with_index.map do |m, i|
25
+ keys = m.keys
26
+ pkt = System.telemetry.packet(target, item).clone
27
+
28
+ keys.reduce(pkt) do |p, key|
29
+ value = m[key]
30
+ transform_key = [target, item, key].join("-")
31
+
32
+ if @transforms[transform_key]
33
+ p.write(key, @transforms[transform_key].call(target, item, key, value, i))
34
+ else
35
+ p.write(key, value)
36
+ end
37
+ p
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,67 @@
1
+ ##
2
+ # Internal respresentation of an aggregate packet
3
+ module Cosmos
4
+ class BaseNameMap
5
+ attr_accessor :map, :name
6
+
7
+ ##
8
+ # map is a hash where keys are normalized item names (i.e. VALUE_A instead of VALUE_A_0) and
9
+ # values are arrays of all the values whose original keys (VALUE_A_x) mapped to that value. For example:
10
+ # { 'VALUE_A' => [1,2,3]}.
11
+ #
12
+ # name is the name of the packet
13
+ def initialize(map, name)
14
+ @map = map
15
+ @name = name # packet name
16
+ end
17
+
18
+ ##
19
+ # Number of simple packets contained within the aggregate packet
20
+ def size
21
+ if @map.empty?
22
+ return 0
23
+ else
24
+ _max_arity
25
+ end
26
+ end
27
+
28
+ def _max_arity
29
+ return 0 if @map.empty?
30
+ @map.max_by {|k, v| v.length}.last.length
31
+ end
32
+
33
+ def _field_arity(k)
34
+ result = @map[k]
35
+ if result.nil?
36
+ 0
37
+ else
38
+ result.length
39
+ end
40
+ end
41
+
42
+ ##
43
+ # Expands map of keys to arrays of values into a single array containing hashes where
44
+ # each key maps to only a single value
45
+ # i.e. {'VALUE_A' => [1,2]} => [{'VALUE_A' => 1}, {'VALUE_A' => 2}]
46
+ def extract_all
47
+ max = _max_arity
48
+ range = if(max > 0)
49
+ [*0..(max - 1)]
50
+ else
51
+ [0]
52
+ end
53
+
54
+ range.map do |i|
55
+ keys = @map.keys
56
+ keys.reduce({}) do |acc, k|
57
+ if(_field_arity(k) == 1)
58
+ acc[k] = @map[k].first
59
+ else
60
+ acc[k] = @map[k][i]
61
+ end
62
+ acc
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,87 @@
1
+ require 'cosmos'
2
+ require 'cosmos/interfaces/tcpip_server_interface'
3
+
4
+
5
+
6
+ module Cosmos
7
+ ##
8
+ # A custom interface that unpacks aggregate packets (packets with many granules) into many
9
+ # simple packets (packets with a single granule). This way we can use all the cosmos niceties
10
+ # without having to send packets for individual measurements. Essentially we unpack an aggregate
11
+ # packet into many packets that are stored in a queue that is read from. When the queue is empty
12
+ # we look for new aggregate packets
13
+ class UnpackingInterface < TcpipServerInterface
14
+ ##
15
+ # Transformations defined on an item in a simple packet. Entries should be of the
16
+ # form: "<TARGET>-<PACKET_NAME>-<ITEM_NAME>" => Proc
17
+ # where the proc can accept the following parameters TargetName, ItemName, key, value, index
18
+ # index is the index of the granule in the aggregate packet that was transformed into the simple packet
19
+ # More info about procs can be found here: https://ruby-doc.org/core-2.4.1/Proc.html
20
+ def transforms
21
+ {}
22
+ end
23
+
24
+ ##
25
+ # Maps aggregate packets (packets with many granules) to simple packets (packets with a single granule)
26
+ # should have the form 'AggregatePacket' => 'SimplePacket'
27
+ # For example: 'Science' => 'Science2'
28
+ def agg_pkt_map
29
+ {}
30
+ end
31
+
32
+ ##
33
+ # Cosmos target interface is being used with
34
+ def target
35
+ ""
36
+ end
37
+
38
+ ##
39
+ # Create and return a new instance of your own custom PacketMapper
40
+ def packet_mapper
41
+ PacketMapper.new
42
+ end
43
+
44
+ def connect
45
+ @derived_queue = []
46
+ super()
47
+ end
48
+
49
+
50
+ ##
51
+ # Unpack an aggregate packet if necessary and add resulting packets to the internal FIFO queue
52
+ def process(packet:, target:, agg_packet:, simple_packet:)
53
+ agg_pkt = System.telemetry.packet(target, agg_packet)
54
+ if(agg_pkt.identify?(packet.buffer))
55
+ processor = AggregatePacketProcesser.new(packet_mapper, transforms)
56
+ agg_pkt.buffer = packet.buffer.clone
57
+ result = processor.unpack(agg_pkt, target, simple_packet)
58
+
59
+ @derived_queue.concat(result)
60
+ end
61
+ return packet
62
+ end
63
+
64
+ ##
65
+ # This method is called by COSMOS internally, essentially if we have packets on the queue read those
66
+ # otherwise wait for a packet, and unpack if necessary
67
+ def read
68
+ if !@derived_queue.empty?
69
+ p1 = @derived_queue.shift
70
+ return p1
71
+ else
72
+
73
+ # This is a blocking call to wait for an actual packet to come over the wire
74
+ packet = super()
75
+
76
+ agg_pkt_map.select do |agg_packet, simple_packet|
77
+ agg_pkt = System.telemetry.packet(target, agg_packet)
78
+ if(agg_pkt.identify?(packet.buffer))
79
+ process(packet: packet, target: target, agg_packet: agg_packet, simple_packet: simple_packet)
80
+ end
81
+ end
82
+
83
+ return packet
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,3 @@
1
+ module UnpackingInterface
2
+ VERSION = "1.0.0"
3
+ end
metadata ADDED
@@ -0,0 +1,174 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cosmos-unpacking_interface
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Center for Space Engineering
8
+ - Nick Benoit
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2019-04-20 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '1.3'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '1.3'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rake
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '10.0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '10.0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: cosmos
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - '='
47
+ - !ruby/object:Gem::Version
48
+ version: '4.3'
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - '='
54
+ - !ruby/object:Gem::Version
55
+ version: '4.3'
56
+ description:
57
+ email:
58
+ - cse@engineering.usu.edu
59
+ - nick.benoit14@gmail.com
60
+ executables: []
61
+ extensions: []
62
+ extra_rdoc_files: []
63
+ files:
64
+ - ".gitignore"
65
+ - ".travis.yml"
66
+ - Gemfile
67
+ - LICENSE.txt
68
+ - README.md
69
+ - Rakefile
70
+ - bin/console
71
+ - bin/setup
72
+ - config/data/README.txt
73
+ - config/data/crc.txt
74
+ - config/system/system.txt
75
+ - config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt
76
+ - config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt
77
+ - config/targets/COSMOS/cmd_tlm_server.txt
78
+ - config/targets/COSMOS/screens/limits_change.txt
79
+ - config/targets/COSMOS/screens/version.txt
80
+ - config/targets/COSMOS/target.txt
81
+ - config/targets/PI/cmd_tlm/pi_tlm_test.txt
82
+ - config/targets/PI/cmd_tlm/pi_tlm_test_1.txt
83
+ - config/targets/PI/cmd_tlm/pi_tlm_test_2.txt
84
+ - config/targets/PI/cmd_tlm/pi_tlm_test_3.txt
85
+ - config/targets/PI/cmd_tlm_server.txt
86
+ - config/targets/PI/target.txt
87
+ - cosmos-unpacking_interface.gemspec
88
+ - doc/Cosmos.html
89
+ - doc/Cosmos/AggregatePacketMapper.html
90
+ - doc/Cosmos/AggregatePacketProcesser.html
91
+ - doc/Cosmos/BaseNameMap.html
92
+ - doc/Cosmos/UnpackingInterface.html
93
+ - doc/UnpackingInterface.html
94
+ - doc/created.rid
95
+ - doc/css/fonts.css
96
+ - doc/css/rdoc.css
97
+ - doc/fonts/Lato-Light.ttf
98
+ - doc/fonts/Lato-LightItalic.ttf
99
+ - doc/fonts/Lato-Regular.ttf
100
+ - doc/fonts/Lato-RegularItalic.ttf
101
+ - doc/fonts/SourceCodePro-Bold.ttf
102
+ - doc/fonts/SourceCodePro-Regular.ttf
103
+ - doc/images/add.png
104
+ - doc/images/arrow_up.png
105
+ - doc/images/brick.png
106
+ - doc/images/brick_link.png
107
+ - doc/images/bug.png
108
+ - doc/images/bullet_black.png
109
+ - doc/images/bullet_toggle_minus.png
110
+ - doc/images/bullet_toggle_plus.png
111
+ - doc/images/date.png
112
+ - doc/images/delete.png
113
+ - doc/images/find.png
114
+ - doc/images/loadingAnimation.gif
115
+ - doc/images/macFFBgHack.png
116
+ - doc/images/package.png
117
+ - doc/images/page_green.png
118
+ - doc/images/page_white_text.png
119
+ - doc/images/page_white_width.png
120
+ - doc/images/plugin.png
121
+ - doc/images/ruby.png
122
+ - doc/images/tag_blue.png
123
+ - doc/images/tag_green.png
124
+ - doc/images/transparent.png
125
+ - doc/images/wrench.png
126
+ - doc/images/wrench_orange.png
127
+ - doc/images/zoom.png
128
+ - doc/index.html
129
+ - doc/js/darkfish.js
130
+ - doc/js/jquery.js
131
+ - doc/js/navigation.js
132
+ - doc/js/navigation.js.gz
133
+ - doc/js/search.js
134
+ - doc/js/search_index.js
135
+ - doc/js/search_index.js.gz
136
+ - doc/js/searcher.js
137
+ - doc/js/searcher.js.gz
138
+ - doc/lib/README_rdoc.html
139
+ - doc/table_of_contents.html
140
+ - lib/cosmos/unpacking_interface.rb
141
+ - lib/cosmos/unpacking_interface/aggregate_packet_mapper.rb
142
+ - lib/cosmos/unpacking_interface/aggregate_packet_processor.rb
143
+ - lib/cosmos/unpacking_interface/base_name_map.rb
144
+ - lib/cosmos/unpacking_interface/unpacking_interface.rb
145
+ - lib/cosmos/unpacking_interface/version.rb
146
+ homepage: https://github.com/nick-benoit14/cosmos-unpacking_interface
147
+ licenses:
148
+ - MIT
149
+ metadata: {}
150
+ post_install_message:
151
+ rdoc_options: []
152
+ require_paths:
153
+ - lib
154
+ required_ruby_version: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ required_rubygems_version: !ruby/object:Gem::Requirement
160
+ requirements:
161
+ - - ">="
162
+ - !ruby/object:Gem::Version
163
+ version: '0'
164
+ requirements: []
165
+ rubyforge_project:
166
+ rubygems_version: 2.4.8
167
+ signing_key:
168
+ specification_version: 4
169
+ summary: A custom interface that unpacks aggregate packets (packets with many granules)
170
+ into many simple packets (packets with a single granule). This way we can use all
171
+ the cosmos niceties without having to send packets for individual measurements.
172
+ Essentially we unpack an aggregate packet into many packets that are stored in
173
+ a queue that is read from. When the queue is empty we look for new aggregate packets
174
+ test_files: []