openc3-demo 5.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +727 -0
  3. data/README.md +30 -0
  4. data/Rakefile +42 -0
  5. data/microservices/EXAMPLE/example_target.rb +123 -0
  6. data/microservices/TEMPLATED/scpi_target.rb +79 -0
  7. data/plugin.txt +112 -0
  8. data/targets/EXAMPLE/cmd_tlm/example_cmds.txt +2 -0
  9. data/targets/EXAMPLE/cmd_tlm/example_tlm.txt +5 -0
  10. data/targets/EXAMPLE/lib/example_interface.rb +27 -0
  11. data/targets/EXAMPLE/target.txt +9 -0
  12. data/targets/INST/cmd_tlm/_ccsds_cmd.txt +9 -0
  13. data/targets/INST/cmd_tlm/_ccsds_tlm.txt +19 -0
  14. data/targets/INST/cmd_tlm/inst_cmds.txt +57 -0
  15. data/targets/INST/cmd_tlm/inst_tlm.txt +162 -0
  16. data/targets/INST/cmd_tlm/inst_tlm_override.txt +12 -0
  17. data/targets/INST/data/attitude.bin +0 -0
  18. data/targets/INST/data/position.bin +0 -0
  19. data/targets/INST/lib/example_limits_response.rb +39 -0
  20. data/targets/INST/lib/sim_inst.rb +354 -0
  21. data/targets/INST/procedures/checks.rb +11 -0
  22. data/targets/INST/procedures/collect.rb +18 -0
  23. data/targets/INST/procedures/disconnect.rb +29 -0
  24. data/targets/INST/procedures/file_dialog.rb +13 -0
  25. data/targets/INST/procedures/my_script_suite.rb +46 -0
  26. data/targets/INST/procedures/my_test_suite.rb +45 -0
  27. data/targets/INST/procedures/target_file.rb +21 -0
  28. data/targets/INST/procedures/utilities/clear.rb +7 -0
  29. data/targets/INST/procedures/utilities/collect.rb +14 -0
  30. data/targets/INST/public/ground_error.png +0 -0
  31. data/targets/INST/public/ground_off.png +0 -0
  32. data/targets/INST/public/ground_on.png +0 -0
  33. data/targets/INST/public/satellite.png +0 -0
  34. data/targets/INST/screens/_footer.txt +3 -0
  35. data/targets/INST/screens/adcs.txt +71 -0
  36. data/targets/INST/screens/array.txt +15 -0
  37. data/targets/INST/screens/block.txt +6 -0
  38. data/targets/INST/screens/commanding.txt +44 -0
  39. data/targets/INST/screens/graphs.txt +17 -0
  40. data/targets/INST/screens/ground.txt +46 -0
  41. data/targets/INST/screens/hs.txt +42 -0
  42. data/targets/INST/screens/latest.txt +21 -0
  43. data/targets/INST/screens/limits.txt +82 -0
  44. data/targets/INST/screens/other.txt +37 -0
  45. data/targets/INST/screens/params.txt +54 -0
  46. data/targets/INST/screens/simple.txt +6 -0
  47. data/targets/INST/screens/tabs.txt +66 -0
  48. data/targets/INST/screens/web.txt +5 -0
  49. data/targets/INST/tables/bin/ConfigTables.bin +0 -0
  50. data/targets/INST/tables/config/ConfigTables_def.txt +7 -0
  51. data/targets/INST/tables/config/MCConfigurationTable_def.txt +36 -0
  52. data/targets/INST/tables/config/PPSSelectionTable_def.txt +7 -0
  53. data/targets/INST/tables/config/TLMMonitoringTable_def.txt +31 -0
  54. data/targets/INST/tables/procedures/download.rb +16 -0
  55. data/targets/INST/tables/procedures/upload.rb +19 -0
  56. data/targets/INST/target.txt +31 -0
  57. data/targets/SYSTEM/cmd_tlm/limits_groups.txt +6 -0
  58. data/targets/SYSTEM/cmd_tlm/meta_tlm.txt +10 -0
  59. data/targets/SYSTEM/cmd_tlm/system_cmds.txt +41 -0
  60. data/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
  61. data/targets/SYSTEM/lib/example_background_task.rb +66 -0
  62. data/targets/SYSTEM/lib/example_target.rb +112 -0
  63. data/targets/SYSTEM/lib/limits_groups.rb +64 -0
  64. data/targets/SYSTEM/lib/scpi_target.rb +76 -0
  65. data/targets/SYSTEM/procedures/example_test.rb +191 -0
  66. data/targets/SYSTEM/procedures/interactive.rb +38 -0
  67. data/targets/SYSTEM/procedures/openc3_api_test.rb +286 -0
  68. data/targets/SYSTEM/procedures/run_example_test.rb +3 -0
  69. data/targets/SYSTEM/procedures/test.rb +49 -0
  70. data/targets/SYSTEM/screens/status.txt +12 -0
  71. data/targets/SYSTEM/target.txt +12 -0
  72. data/targets/TEMPLATED/cmd_tlm/templated_cmds.txt +13 -0
  73. data/targets/TEMPLATED/cmd_tlm/templated_tlm.txt +3 -0
  74. data/targets/TEMPLATED/lib/templated_interface.rb +69 -0
  75. data/targets/TEMPLATED/target.txt +8 -0
  76. data/tools/widgets/BigWidget/BigWidget.umd.min.js +4 -0
  77. data/tools/widgets/BigWidget/BigWidget.umd.min.js.map +1 -0
  78. data/tools/widgets/HelloworldWidget/HelloworldWidget.umd.min.js +2 -0
  79. data/tools/widgets/HelloworldWidget/HelloworldWidget.umd.min.js.map +1 -0
  80. metadata +126 -0
data/README.md ADDED
@@ -0,0 +1,30 @@
1
+ ## OpenC3 Demo Plugin
2
+
3
+ [Documentation](https://openc3.com)
4
+
5
+ This plugin provides a simple demo configuration for OpenC3 that shows off a lot of the features of OpenC3 and provides a test environment.
6
+
7
+ ## Getting Started
8
+
9
+ 1. At the OpenC3 Admin - Plugins, upload the openc3-demo.gem file
10
+
11
+ 2. To build widgets run: yarn && yarn build
12
+
13
+ ## Contributing
14
+
15
+ We encourage you to contribute to OpenC3!
16
+
17
+ Contributing is easy.
18
+
19
+ 1. Fork the project
20
+ 2. Create a feature branch
21
+ 3. Make your changes
22
+ 4. Submit a pull request
23
+
24
+ Before any contributions can be incorporated we do require all contributors to agree to a Contributor License Agreement.
25
+
26
+ This protects both you and us and you retain full rights to any code you write.
27
+
28
+ ## License
29
+
30
+ This OpenC3 plugin is released under the AGPLv3.0 with a few addendums. See [LICENSE.txt](LICENSE.txt)
data/Rakefile ADDED
@@ -0,0 +1,42 @@
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2022 Ball Aerospace & Technologies Corp.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU Affero General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+ #
11
+ # This program is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU Affero General Public License for more details.
15
+
16
+ # Modified by OpenC3, Inc.
17
+ # All changes Copyright 2022, OpenC3, Inc.
18
+ # All Rights Reserved
19
+
20
+ PLUGIN_NAME = Dir['*.gemspec'][0].split('.')[0..-2].join('.')
21
+
22
+ task :require_version do
23
+ if ENV['VERSION']
24
+ if ENV['VERSION'] =~ /-/
25
+ # Add Timestamp to prerelease versions
26
+ ENV['VERSION'] = ENV['VERSION'] + "." + Time.now.utc.strftime("%Y%m%d%H%M%S")
27
+ end
28
+ else
29
+ puts "VERSION is required: rake <task> VERSION=X.X.X"
30
+ exit 1
31
+ end
32
+ end
33
+
34
+ task :build => [:require_version] do
35
+ _, platform, *_ = RUBY_PLATFORM.split("-")
36
+ if platform == 'mswin32' or platform == 'mingw32'
37
+ puts "Warning: Building gem on Windows will lose file permissions"
38
+ end
39
+ # Build the widgets in the src directory
40
+ system("yarn run build")
41
+ system("gem build #{PLUGIN_NAME}")
42
+ end
@@ -0,0 +1,123 @@
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2022 Ball Aerospace & Technologies Corp.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU Affero General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+ #
11
+ # This program is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU Affero General Public License for more details.
15
+
16
+ # Modified by OpenC3, Inc.
17
+ # All changes Copyright 2022, OpenC3, Inc.
18
+ # All Rights Reserved
19
+
20
+ require 'openc3'
21
+ require 'openc3/interfaces'
22
+ require 'openc3/tools/cmd_tlm_server/interface_thread'
23
+
24
+ module OpenC3
25
+ class ExampleTarget
26
+ class ExampleServerInterface < TcpipServerInterface
27
+ def initialize(port)
28
+ super(port.to_i, port.to_i, 5.0, nil, 'LENGTH', 0, 32, 4, 1, 'BIG_ENDIAN', 4, nil, nil, true)
29
+ end
30
+ end
31
+
32
+ class ExampleInterfaceThread < InterfaceThread
33
+ attr_accessor :target_name
34
+
35
+ protected
36
+ def handle_packet(packet)
37
+ identified_packet = System.commands.identify(packet.buffer, [@target_name])
38
+ if identified_packet
39
+ Logger.info "Received command: #{identified_packet.target_name} #{identified_packet.packet_name}"
40
+ else
41
+ Logger.info "Received UNKNOWN command"
42
+ end
43
+ end
44
+ end
45
+
46
+ class ExampleTelemetryThread
47
+ attr_reader :thread
48
+
49
+ def initialize(interface, target_name)
50
+ @interface = interface
51
+ @target_name = target_name
52
+ @sleeper = Sleeper.new
53
+ end
54
+
55
+ def start
56
+ packet = System.telemetry.packet(@target_name, 'STATUS')
57
+ @thread = Thread.new do
58
+ @stop_thread = false
59
+ @sleeper.sleep(5)
60
+ begin
61
+ loop do
62
+ packet.write('PACKET_ID', 1)
63
+ packet.write('STRING', "The time is now: #{Time.now.sys.formatted}")
64
+ @interface.write(packet)
65
+ break if @sleeper.sleep(1)
66
+ end
67
+ rescue Exception => err
68
+ Logger.error "ExampleTelemetryThread unexpectedly died\n#{err.formatted}"
69
+ raise err
70
+ end
71
+ end
72
+ end
73
+
74
+ def stop
75
+ OpenC3.kill_thread(self, @thread)
76
+ end
77
+
78
+ def graceful_kill
79
+ @sleeper.cancel
80
+ end
81
+ end
82
+
83
+ def initialize(target_name, port)
84
+ # Create interface to receive commands and send telemetry
85
+ @target_name = target_name
86
+ @interface = ExampleServerInterface.new(port)
87
+ @interface_thread = nil
88
+ @telemetry_thread = nil
89
+ end
90
+
91
+ def start
92
+ @interface_thread = ExampleInterfaceThread.new(@interface)
93
+ @interface_thread.target_name = @target_name
94
+ @interface_thread.start
95
+ @telemetry_thread = ExampleTelemetryThread.new(@interface, @target_name)
96
+ @telemetry_thread.start
97
+ end
98
+
99
+ def stop
100
+ @telemetry_thread.stop if @telemetry_thread
101
+ @interface_thread.stop if @interface_thread
102
+ end
103
+
104
+ def self.run(target_name, port)
105
+ Logger.level = Logger::INFO
106
+ Thread.abort_on_exception = true
107
+ temp_dir = Dir.mktmpdir
108
+ System.setup_targets([target_name], temp_dir, scope: ENV['OPENC3_SCOPE'])
109
+ target = self.new(target_name, port)
110
+ begin
111
+ target.start
112
+ while true
113
+ sleep 1
114
+ end
115
+ rescue SystemExit, Interrupt
116
+ target.stop
117
+ FileUtils.remove_entry(temp_dir) if File.exist?(temp_dir)
118
+ end
119
+ end
120
+ end
121
+ end
122
+
123
+ OpenC3::ExampleTarget.run(ARGV[0], ARGV[1]) if __FILE__ == $0
@@ -0,0 +1,79 @@
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2022 Ball Aerospace & Technologies Corp.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU Affero General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+ #
11
+ # This program is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU Affero General Public License for more details.
15
+
16
+ # Modified by OpenC3, Inc.
17
+ # All changes Copyright 2022, OpenC3, Inc.
18
+ # All Rights Reserved
19
+
20
+ require 'openc3'
21
+ require 'openc3/interfaces'
22
+ require 'openc3/tools/cmd_tlm_server/interface_thread'
23
+
24
+ module OpenC3
25
+ class ScpiTarget
26
+ class ScpiServerInterface < TcpipServerInterface
27
+ def initialize(port)
28
+ super(port.to_i, port.to_i, 5.0, nil, 'TERMINATED', '0xA', '0xA')
29
+ end
30
+ end
31
+
32
+ class ScpiInterfaceThread < InterfaceThread
33
+ def initialize(interface)
34
+ super(interface)
35
+ @index = 0
36
+ end
37
+
38
+ protected
39
+ def handle_packet(packet)
40
+ Logger.info "Received command: #{packet.buffer}"
41
+ if packet.buffer.include?('?')
42
+ @interface.write_raw(@index.to_s + "\x0A")
43
+ end
44
+ @index += 1
45
+ end
46
+ end
47
+
48
+ def initialize(port)
49
+ # Create interface to receive commands and send telemetry
50
+ @target_interface = ScpiServerInterface.new(port)
51
+ @interface_thread = nil
52
+ end
53
+
54
+ def start
55
+ @interface_thread = ScpiInterfaceThread.new(@target_interface)
56
+ @interface_thread.start
57
+ end
58
+
59
+ def stop
60
+ @interface_thread.stop if @interface_thread
61
+ end
62
+
63
+ def self.run(target_name, port)
64
+ Logger.level = Logger::INFO
65
+ temp_dir = Dir.mktmpdir
66
+ System.setup_targets([target_name], temp_dir, scope: ENV['OPENC3_SCOPE'])
67
+ target = self.new(port)
68
+ begin
69
+ target.start
70
+ loop { sleep 1 }
71
+ rescue SystemExit, Interrupt
72
+ target.stop
73
+ FileUtils.remove_entry(temp_dir) if File.exist?(temp_dir)
74
+ end
75
+ end
76
+ end
77
+ end
78
+
79
+ OpenC3::ScpiTarget.run(ARGV[0], ARGV[1]) if __FILE__ == $0
data/plugin.txt ADDED
@@ -0,0 +1,112 @@
1
+ # Note: This plugin includes 4 targets in one plugin to make it easy to install
2
+ # the OpenC3 demo with one plugin. Generally it is better to only have one
3
+ # target per plugin
4
+
5
+ VARIABLE inst_target_name INST
6
+ VARIABLE inst2_target_name INST2
7
+ VARIABLE example_target_name EXAMPLE
8
+ VARIABLE templated_target_name TEMPLATED
9
+ VARIABLE system_target_name SYSTEM
10
+ VARIABLE inst_int_name INST_INT
11
+ VARIABLE inst_router_name INST_ROUTER
12
+ VARIABLE inst2_int_name INST2_INT
13
+ VARIABLE example_int_name EXAMPLE_INT
14
+ VARIABLE templated_int_name TEMPLATED_INT
15
+ VARIABLE demo_tool_name Demo
16
+ VARIABLE example_microservice_name openc3-example
17
+ VARIABLE templated_microservice_name openc3-templated
18
+ VARIABLE example_port 9999
19
+ VARIABLE templated_port 5025
20
+ VARIABLE log_retain_time 172800
21
+ VARIABLE reduced_log_retain_time 2592000
22
+
23
+ <% include_inst = (inst_target_name.strip.length > 0) %>
24
+ <% include_inst2 = (inst2_target_name.strip.length > 0) %>
25
+ <% include_example = (example_target_name.strip.length > 0) %>
26
+ <% include_templated = (templated_target_name.strip.length > 0) %>
27
+ <% include_system = (system_target_name.strip.length > 0) %>
28
+ <% include_inst_int = (inst_int_name.strip.length > 0) %>
29
+ <% include_inst_router = (inst_router_name.strip.length > 0) %>
30
+ <% include_inst2_int = (inst2_int_name.strip.length > 0) %>
31
+ <% include_example_int = (example_int_name.strip.length > 0) %>
32
+ <% include_templated_int = (templated_int_name.strip.length > 0) %>
33
+ <% include_example_microservice = (example_microservice_name.strip.length > 0) %>
34
+ <% include_templated_microservice = (templated_microservice_name.strip.length > 0) %>
35
+
36
+ <% if include_inst %>
37
+ TARGET INST <%= inst_target_name %>
38
+ LOG_RETAIN_TIME <%= log_retain_time %>
39
+ REDUCED_LOG_RETAIN_TIME <%= reduced_log_retain_time %>
40
+ TLM_LOG_CYCLE_TIME 300
41
+ <% end %>
42
+
43
+ <% if include_inst2 %>
44
+ TARGET INST <%= inst2_target_name %>
45
+ LOG_RETAIN_TIME <%= log_retain_time %>
46
+ REDUCED_LOG_RETAIN_TIME <%= reduced_log_retain_time %>
47
+ TLM_LOG_CYCLE_TIME 600
48
+ <% end %>
49
+
50
+ <% if include_example %>
51
+ TARGET EXAMPLE <%= example_target_name %>
52
+ LOG_RETAIN_TIME <%= log_retain_time %>
53
+ REDUCED_LOG_RETAIN_TIME <%= reduced_log_retain_time %>
54
+ <% end %>
55
+
56
+ <% if include_templated %>
57
+ TARGET TEMPLATED <%= templated_target_name %>
58
+ LOG_RETAIN_TIME <%= log_retain_time %>
59
+ REDUCED_LOG_RETAIN_TIME <%= reduced_log_retain_time %>
60
+ <% end %>
61
+
62
+ <% if include_system %>
63
+ TARGET SYSTEM <%= system_target_name %>
64
+ LOG_RETAIN_TIME <%= log_retain_time %>
65
+ REDUCED_LOG_RETAIN_TIME <%= reduced_log_retain_time %>
66
+ <% end %>
67
+
68
+ <% if include_inst and include_inst_int %>
69
+ INTERFACE <%= inst_int_name %> simulated_target_interface.rb sim_inst.rb
70
+ MAP_TARGET <%= inst_target_name %>
71
+ PROTOCOL READ OverrideProtocol
72
+ <% end %>
73
+
74
+ <% if include_inst2 and include_inst2_int %>
75
+ INTERFACE <%= inst2_int_name %> simulated_target_interface.rb sim_inst.rb
76
+ MAP_TARGET <%= inst2_target_name %>
77
+ DONT_LOG
78
+ PROTOCOL READ_WRITE OverrideProtocol
79
+ <% end %>
80
+
81
+ <% if include_example and include_example_int %>
82
+ INTERFACE <%= example_int_name %> example_interface.rb openc3-operator <%= example_port %>
83
+ MAP_TARGET <%= example_target_name %>
84
+ DONT_CONNECT
85
+ LOG_RAW
86
+ <% end %>
87
+
88
+ <% if include_templated and include_templated_int %>
89
+ INTERFACE <%= templated_int_name %> templated_interface.rb openc3-operator <%= templated_port %> <%= templated_port %> 5.0 nil TEMPLATE 0xA 0xA
90
+ MAP_TARGET <%= templated_target_name %>
91
+ DONT_CONNECT
92
+ <% end %>
93
+
94
+ <% if include_inst and include_inst_router %>
95
+ ROUTER <%= inst_router_name %> tcpip_server_interface.rb 7779 7779 nil 10.0 PREIDENTIFIED
96
+ MAP_TARGET <%= inst_target_name %>
97
+ <% end %>
98
+
99
+ <% if include_example_microservice %>
100
+ MICROSERVICE EXAMPLE <%= example_microservice_name %>
101
+ WORK_DIR .
102
+ CMD ruby example_target.rb <%= example_target_name %> <%= example_port %>
103
+ <% end %>
104
+
105
+ <% if include_templated_microservice %>
106
+ MICROSERVICE TEMPLATED <%= templated_microservice_name %>
107
+ WORK_DIR .
108
+ CMD ruby scpi_target.rb <%= templated_target_name %> <%= templated_port %>
109
+ <% end %>
110
+
111
+ WIDGET BIG
112
+ WIDGET HELLOWORLD
@@ -0,0 +1,2 @@
1
+ COMMAND <%= target_name %> START BIG_ENDIAN "Starts something on the example target"
2
+ APPEND_ID_PARAMETER PACKET_ID 8 UINT 1 1 1 "Packet id"
@@ -0,0 +1,5 @@
1
+ TELEMETRY <%= target_name %> STATUS BIG_ENDIAN "Health and status from the instrument"
2
+ APPEND_ID_ITEM PACKET_ID 8 UINT 1 "Packet id"
3
+ APPEND_ITEM VALUE 32 UINT "Limits value"
4
+ LIMITS DEFAULT 1 ENABLED 0 1 10 11
5
+ APPEND_ITEM STRING 0 STRING "Time string"
@@ -0,0 +1,27 @@
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2022 Ball Aerospace & Technologies Corp.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU Affero General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+ #
11
+ # This program is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU Affero General Public License for more details.
15
+
16
+ # Modified by OpenC3, Inc.
17
+ # All changes Copyright 2022, OpenC3, Inc.
18
+ # All Rights Reserved
19
+
20
+ require 'openc3'
21
+ require 'openc3/interfaces/tcpip_client_interface'
22
+
23
+ class ExampleInterface < OpenC3::TcpipClientInterface
24
+ def initialize (hostname, port, write_timeout = 10.0, read_timeout = nil)
25
+ super(hostname, port, port, write_timeout, read_timeout, 'LENGTH', 0, 32, 4, 1, 'BIG_ENDIAN', 4, nil, nil, true)
26
+ end
27
+ end
@@ -0,0 +1,9 @@
1
+ REQUIRE example_interface.rb
2
+
3
+ # Ignored Parameters
4
+ # IGNORE_PARAMETER parameter_name
5
+ IGNORE_PARAMETER PACKET_ID
6
+
7
+ IGNORE_ITEM RECEIVED_COUNT
8
+ IGNORE_ITEM RECEIVED_TIMESECONDS
9
+ IGNORE_ITEM RECEIVED_TIMEFORMATTED
@@ -0,0 +1,9 @@
1
+ PARAMETER CCSDSVER 0 3 UINT 0 0 0 "CCSDS primary header version number"
2
+ PARAMETER CCSDSTYPE 3 1 UINT 1 1 1 "CCSDS primary header packet type"
3
+ PARAMETER CCSDSSHF 4 1 UINT 0 0 0 "CCSDS primary header secondary header flag"
4
+ ID_PARAMETER CCSDSAPID 5 11 UINT 0 2047 999 "CCSDS primary header application id"
5
+ PARAMETER CCSDSSEQFLAGS 16 2 UINT 3 3 3 "CCSDS primary header sequence flags"
6
+ PARAMETER CCSDSSEQCNT 18 14 UINT 0 16383 0 "CCSDS primary header sequence count"
7
+ OVERFLOW TRUNCATE
8
+ PARAMETER CCSDSLENGTH 32 16 UINT MIN MAX 12 "CCSDS primary header packet length"
9
+ ID_PARAMETER PKTID 48 16 UINT MIN MAX <%= id %> "Packet id"
@@ -0,0 +1,19 @@
1
+ APPEND_ITEM CCSDSVER 3 UINT "CCSDS packet version number (See CCSDS 133.0-B-1)"
2
+ APPEND_ITEM CCSDSTYPE 1 UINT "CCSDS packet type (command or telemetry)"
3
+ STATE TLM 0
4
+ STATE CMD 1
5
+ APPEND_ITEM CCSDSSHF 1 UINT "CCSDS secondary header flag"
6
+ STATE FALSE 0
7
+ STATE TRUE 1
8
+ APPEND_ID_ITEM CCSDSAPID 11 UINT <%= apid %> "CCSDS application process id"
9
+ APPEND_ITEM CCSDSSEQFLAGS 2 UINT "CCSDS sequence flags"
10
+ STATE FIRST 1
11
+ STATE CONT 0
12
+ STATE LAST 2
13
+ STATE NOGROUP 3
14
+ APPEND_ITEM CCSDSSEQCNT 14 UINT "CCSDS packet sequence count"
15
+ OVERFLOW TRUNCATE
16
+ APPEND_ITEM CCSDSLENGTH 16 UINT "CCSDS packet data length"
17
+ APPEND_ITEM TIMESEC 32 UINT "Seconds since epoch (January 1st, 1970, midnight)"
18
+ APPEND_ITEM TIMEUS 32 UINT "Microseconds of second"
19
+ APPEND_ID_ITEM PKTID 16 UINT 1 "Packet id (The combination of CCSDS_APID and PACKET_ID identify the packet)"
@@ -0,0 +1,57 @@
1
+ COMMAND <%= target_name %> COLLECT BIG_ENDIAN "Starts a collect on the <%= target_name %> target"
2
+ <%= render "_ccsds_cmd.txt", locals: {id: 1} %>
3
+ PARAMETER TYPE 64 16 UINT MIN MAX 0 "Collect type"
4
+ REQUIRED
5
+ STATE NORMAL 0
6
+ STATE SPECIAL 1 HAZARDOUS
7
+ PARAMETER DURATION 80 32 FLOAT 0.0 10.0 1.0 "Collect duration"
8
+ PARAMETER OPCODE 112 8 UINT 0x0 0xFF 0xAB "Collect opcode"
9
+ FORMAT_STRING "0x%0X"
10
+ PARAMETER TEMP 120 32 FLOAT 0.0 25.0 0.0 "Collect temperature"
11
+ UNITS Celsius C
12
+
13
+ COMMAND <%= target_name %> ABORT BIG_ENDIAN "Aborts a collect on the <%= target_name %> instrument"
14
+ <%= render "_ccsds_cmd.txt", locals: {id: 2} %>
15
+
16
+ COMMAND <%= target_name %> CLEAR BIG_ENDIAN "Clears counters on the <%= target_name %> instrument"
17
+ HAZARDOUS "Clearing counters may lose valuable information."
18
+ <%= render "_ccsds_cmd.txt", locals: {id: 3} %>
19
+
20
+ COMMAND <%= target_name %> SETPARAMS BIG_ENDIAN "Sets numbered parameters"
21
+ <%= render "_ccsds_cmd.txt", locals: {id: 4} %>
22
+ # ERB syntax:
23
+ <% (1..5).each do |i| %>
24
+ APPEND_PARAMETER VALUE<%= i %> 16 UINT 0 5 1 "Value <%= i %> setting"
25
+ <% end %>
26
+
27
+ SELECT_PARAMETER VALUE5
28
+ POLY_WRITE_CONVERSION 0 2
29
+
30
+ COMMAND <%= target_name %> ASCIICMD BIG_ENDIAN "Enumerated ASCII command"
31
+ <%= render "_ccsds_cmd.txt", locals: {id: 5} %>
32
+ APPEND_PARAMETER STRING 2048 STRING "NOOP" "Enumerated string parameter"
33
+ STATE "NOOP" "NOOP"
34
+ STATE "ARM LASER" "ARM LASER" HAZARDOUS "Arming the laser poses an eye safety hazard."
35
+ STATE "FIRE LASER" "FIRE LASER" HAZARDOUS "WARNING Laser will be fired!"
36
+ APPEND_PARAMETER BINARY 32 STRING 0xDEADBEEF "Binary string"
37
+ APPEND_PARAMETER ASCII 80 STRING "0xDEADBEEF" "ASCII string"
38
+
39
+ COMMAND <%= target_name %> FLTCMD BIG_ENDIAN "Command with float parameters"
40
+ <%= render "_ccsds_cmd.txt", locals: {id: 6} %>
41
+ PARAMETER FLOAT32 64 32 FLOAT MIN MAX 0.0 "Float32 parameter"
42
+ PARAMETER FLOAT64 96 64 FLOAT MIN MAX 0.0 "Float64 parameter"
43
+
44
+ COMMAND <%= target_name %> ARYCMD BIG_ENDIAN "Command with array parameter"
45
+ <%= render "_ccsds_cmd.txt", locals: {id: 7} %>
46
+ ARRAY_PARAMETER ARRAY 64 32 UINT -8 "Array parameter"
47
+ PARAMETER CRC -8 8 UINT MIN MAX 0 "CRC"
48
+
49
+ COMMAND <%= target_name %> SLRPNLDEPLOY BIG_ENDIAN "Deploy solar array panels"
50
+ <%= render "_ccsds_cmd.txt", locals: {id: 8} %>
51
+
52
+ COMMAND <%= target_name %> SLRPNLRESET BIG_ENDIAN "Reset solar array panels"
53
+ <%= render "_ccsds_cmd.txt", locals: {id: 9} %>
54
+
55
+ COMMAND <%= target_name %> MEMLOAD BIG_ENDIAN "Load memory"
56
+ <%= render "_ccsds_cmd.txt", locals: {id: 10} %>
57
+ APPEND_PARAMETER DATA 80 BLOCK "" "Block of data"