openc3-cosmos-fakesat 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE.txt +729 -0
- data/README.md +15 -0
- data/Rakefile +21 -0
- data/plugin.txt +12 -0
- data/targets/FAKESAT/cmd_tlm/_ccsds_cmd.txt +9 -0
- data/targets/FAKESAT/cmd_tlm/_ccsds_tlm.txt +19 -0
- data/targets/FAKESAT/cmd_tlm/cmds.txt +69 -0
- data/targets/FAKESAT/cmd_tlm/tlm.txt +145 -0
- data/targets/FAKESAT/data/attitude.bin +0 -0
- data/targets/FAKESAT/data/position.bin +0 -0
- data/targets/FAKESAT/lib/fake_sat.rb +6 -0
- data/targets/FAKESAT/lib/sim_sat.rb +628 -0
- data/targets/FAKESAT/procedures/fix_fakesat.rb +25 -0
- data/targets/FAKESAT/procedures/mem_load.rb +11 -0
- data/targets/FAKESAT/procedures/ops_suite.rb +48 -0
- data/targets/FAKESAT/procedures/set_override_inject_tlm.rb +41 -0
- data/targets/FAKESAT/screens/status.txt +24 -0
- data/targets/FAKESAT/tables/bin/ConfigTables.bin +0 -0
- data/targets/FAKESAT/tables/config/ConfigTables_def.txt +7 -0
- data/targets/FAKESAT/tables/config/MCConfigurationTable_def.txt +36 -0
- data/targets/FAKESAT/tables/config/PPSSelectionTable_def.txt +7 -0
- data/targets/FAKESAT/tables/config/TLMMonitoringTable_def.txt +31 -0
- data/targets/FAKESAT/tables/procedures/download.rb +16 -0
- data/targets/FAKESAT/tables/procedures/upload.rb +19 -0
- data/targets/FAKESAT/target.txt +32 -0
- metadata +71 -0
@@ -0,0 +1,41 @@
|
|
1
|
+
cmd("FAKESAT SET_MODE with MODE SAFE")
|
2
|
+
wait_check("FAKESAT HEALTH_STATUS MODE == 'SAFE'", 5)
|
3
|
+
|
4
|
+
prompt("Ensure Packet Viewer is open to INST HEALTH_STATUS and watch MODE")
|
5
|
+
|
6
|
+
# Call set_tlm twice to ensure it gets processed as real tlm flows
|
7
|
+
set_tlm("FAKESAT HEALTH_STATUS MODE = 'OPERATE'")
|
8
|
+
wait 0.2
|
9
|
+
set_tlm("FAKESAT HEALTH_STATUS MODE = 'OPERATE'")
|
10
|
+
wait 5 # Should see PacketViewer briefly
|
11
|
+
# This check fails as we receive data and revert back to 'SAFE'
|
12
|
+
check("FAKESAT HEALTH_STATUS MODE == 'OPERATE'")
|
13
|
+
# set_tlm back to SAFE to restore in the disconnected version
|
14
|
+
set_tlm("FAKESAT HEALTH_STATUS MODE = 'SAFE'")
|
15
|
+
set_tlm("FAKESAT HEALTH_STATUS MODE = 0", type: :RAW)
|
16
|
+
|
17
|
+
override_tlm("FAKESAT HEALTH_STATUS MODE = 'OPERATE'")
|
18
|
+
wait 2
|
19
|
+
# By default it overrides all the value types with the value
|
20
|
+
# This includes types that might not make sense like :RAW
|
21
|
+
check("FAKESAT HEALTH_STATUS MODE == 'OPERATE'", type: :RAW)
|
22
|
+
check("FAKESAT HEALTH_STATUS MODE == 'OPERATE'", type: :CONVERTED)
|
23
|
+
check("FAKESAT HEALTH_STATUS MODE == 'OPERATE'", type: :FORMATTED)
|
24
|
+
check("FAKESAT HEALTH_STATUS MODE == 'OPERATE'", type: :WITH_UNITS)
|
25
|
+
wait
|
26
|
+
# Clear the overrides
|
27
|
+
normalize_tlm("FAKESAT HEALTH_STATUS MODE")
|
28
|
+
wait_check("FAKESAT HEALTH_STATUS MODE == 0", 5, type: :RAW)
|
29
|
+
wait_check("FAKESAT HEALTH_STATUS MODE == 'SAFE'", 5) # default CONVERTED
|
30
|
+
wait_check("FAKESAT HEALTH_STATUS MODE == 'SAFE'", 5, type: :FORMATTED)
|
31
|
+
wait_check("FAKESAT HEALTH_STATUS MODE == 'SAFE'", 5, type: :WITH_UNITS)
|
32
|
+
wait
|
33
|
+
|
34
|
+
# Packet Viewer shows all telemetry zeroed except MODE
|
35
|
+
# Call inject_tlm twice to ensure it gets processed as real tlm flows
|
36
|
+
inject_tlm("FAKESAT", "HEALTH_STATUS", { "MODE" => "OPERATE" })
|
37
|
+
wait 0.2
|
38
|
+
inject_tlm("FAKESAT", "HEALTH_STATUS", { "MODE" => "OPERATE" })
|
39
|
+
wait 2
|
40
|
+
# With flowing tlm, the next received packet overwrites so we're back
|
41
|
+
wait_check("FAKESAT HEALTH_STATUS MODE == 'SAFE'", 2)
|
@@ -0,0 +1,24 @@
|
|
1
|
+
SCREEN AUTO AUTO 1.0
|
2
|
+
|
3
|
+
HORIZONTAL
|
4
|
+
VERTICALBOX ADCS
|
5
|
+
LABELVALUE FAKESAT ADCS Q1
|
6
|
+
LABELVALUE FAKESAT ADCS Q2
|
7
|
+
LABELVALUE FAKESAT ADCS Q3
|
8
|
+
LABELVALUE FAKESAT ADCS Q4
|
9
|
+
END
|
10
|
+
VERTICAL
|
11
|
+
VERTICALBOX Health Status
|
12
|
+
LABELVALUE FAKESAT HEALTH_STATUS CMD_ACPT_CNT
|
13
|
+
LABELVALUE FAKESAT HEALTH_STATUS MODE
|
14
|
+
LABELVALUE FAKESAT IMAGER COLLECTS
|
15
|
+
END
|
16
|
+
END
|
17
|
+
END
|
18
|
+
VERTICALBOX Mech
|
19
|
+
LABELVALUE FAKESAT MECH SLRPNL1_ANG
|
20
|
+
LABELVALUE FAKESAT MECH SLRPNL2_ANG
|
21
|
+
END
|
22
|
+
VERTICALBOX Event
|
23
|
+
LABELVALUE FAKESAT EVENT MESSAGE CONVERTED 50
|
24
|
+
END
|
Binary file
|
@@ -0,0 +1,36 @@
|
|
1
|
+
TABLE "MC_Configuration" BIG_ENDIAN KEY_VALUE "Memory Control Configuration Table"
|
2
|
+
APPEND_PARAMETER "Scrub_Region_1_Start_Addr" 32 UINT 0 0x03FFFFFB 0
|
3
|
+
FORMAT_STRING "0x%0X"
|
4
|
+
APPEND_PARAMETER "Scrub_Region_1_End_Addr" 32 UINT 0 0x03FFFFFF 0x03FFFFFF
|
5
|
+
FORMAT_STRING "0x%0X"
|
6
|
+
APPEND_PARAMETER "Scrub_Region_2_Start_Addr" 32 UINT 0 0x03FFFFB 0
|
7
|
+
FORMAT_STRING "0x%0X"
|
8
|
+
APPEND_PARAMETER "Scrub_Region_2_End_Addr" 32 UINT 0 0x03FFFFF 0x03FFFFF
|
9
|
+
FORMAT_STRING "0x%0X"
|
10
|
+
APPEND_PARAMETER "Dump_Packet_Throttle_(sec)" 32 UINT 0 0x0FFFFFFFF 2 "Number of seconds to wait between dumping large packets"
|
11
|
+
APPEND_PARAMETER "Memory_Scrubbing" 8 UINT 0 1 1
|
12
|
+
STATE DISABLE 0
|
13
|
+
STATE ENABLE 1
|
14
|
+
APPEND_PARAMETER "SIOC_Memory_Config" 8 UINT 1 3 3
|
15
|
+
GENERIC_WRITE_CONVERSION_START
|
16
|
+
if packet.read("Memory_Scrubbing") == 'DISABLE'
|
17
|
+
packet.get_item("SIOC_Memory_Config").range = (10..20)
|
18
|
+
else
|
19
|
+
packet.get_item("SIOC_Memory_Config").range = (1..3)
|
20
|
+
end
|
21
|
+
value
|
22
|
+
GENERIC_WRITE_CONVERSION_END
|
23
|
+
APPEND_PARAMETER "Uneditable_Text" 32 UINT MIN MAX 0xDEADBEEF "Uneditable field"
|
24
|
+
FORMAT_STRING "0x%0X"
|
25
|
+
UNEDITABLE
|
26
|
+
APPEND_PARAMETER "Uneditable_State" 16 UINT MIN MAX 0 "Uneditable field"
|
27
|
+
STATE DISABLE 0
|
28
|
+
STATE ENABLE 1
|
29
|
+
UNEDITABLE
|
30
|
+
APPEND_PARAMETER "Uneditable_Check" 16 UINT MIN MAX 1 "Uneditable field"
|
31
|
+
STATE UNCHECKED 0
|
32
|
+
STATE CHECKED 1
|
33
|
+
UNEDITABLE
|
34
|
+
APPEND_PARAMETER "Binary" 32 STRING 0xDEADBEEF "Binary string"
|
35
|
+
APPEND_PARAMETER "Pad" 16 UINT 0 0 0
|
36
|
+
HIDDEN
|
@@ -0,0 +1,7 @@
|
|
1
|
+
TABLE "PPS_Selection" BIG_ENDIAN KEY_VALUE "Payload Clock Control Pulse Per Second Selection Table"
|
2
|
+
APPEND_PARAMETER "Primary_PPS" 8 UINT 0 1 1
|
3
|
+
STATE CHECKED 1
|
4
|
+
STATE UNCHECKED 0
|
5
|
+
APPEND_PARAMETER "Redundant_PPS" 8 UINT 0 1 0
|
6
|
+
STATE UNCHECKED 0
|
7
|
+
STATE CHECKED 1
|
@@ -0,0 +1,31 @@
|
|
1
|
+
TABLE "TLM_Monitoring" BIG_ENDIAN ROW_COLUMN 100 "Telemetry Monitoring Table"
|
2
|
+
APPEND_PARAMETER "Threshold" 32 UINT MIN MAX 0 "Telemetry item threshold at which point persistance is incremented"
|
3
|
+
APPEND_PARAMETER "Offset" 32 UINT MIN MAX 0 "Offset into the telemetry packet to monitor"
|
4
|
+
APPEND_PARAMETER "Data_Size" 32 UINT 0 3 0 "Amount of data to monitor (bytes)"
|
5
|
+
STATE BITS 0
|
6
|
+
STATE BYTE 1
|
7
|
+
STATE WORD 2
|
8
|
+
STATE LONGWORD 3
|
9
|
+
APPEND_PARAMETER "Bit_Mask" 32 UINT MIN MAX 0 "Bit Mask to apply to the Data Size before the value is compared ot the Threshold"
|
10
|
+
APPEND_PARAMETER "Persistence" 32 UINT MIN MAX 0 "Number of times the Threshold must be exceeded before Action is triggered"
|
11
|
+
APPEND_PARAMETER "Type" 32 UINT 0 3 0 "How the Threshold is compared against"
|
12
|
+
STATE LESS_THAN 0
|
13
|
+
STATE GREATER_THAN 1
|
14
|
+
STATE EQUAL_TO 2
|
15
|
+
STATE NOT_EQUAL_TO 3
|
16
|
+
APPEND_PARAMETER "Action" 32 UINT 0 4 0 "Action to take when Persistance is met"
|
17
|
+
STATE NO_ACTION_REQUIRED 0
|
18
|
+
STATE INITIATE_RESET 1
|
19
|
+
STATE CHANGE_MODE_SAFE 2
|
20
|
+
APPEND_PARAMETER "Group" 32 UINT 1 4 1 "Telemetry group this monitor item belongs to. Groups are automatically enabled due to payload events."
|
21
|
+
STATE ALL_MODES 1
|
22
|
+
STATE SAFE_MODE 2
|
23
|
+
APPEND_PARAMETER "Signed" 8 UINT 0 2 0 "Whether to treat the Data Size data as signed or unsigned when comparing to the Threshold"
|
24
|
+
STATE NOT_APPLICABLE 0
|
25
|
+
STATE UNSIGNED 1
|
26
|
+
STATE SIGNED 2
|
27
|
+
|
28
|
+
# Note we're creating 100 DEFAULT rows to match our 100 row table
|
29
|
+
<% 100.times do %>
|
30
|
+
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
31
|
+
<% end %>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# TBL_FILENAME is set to the name of the table file to overwrite
|
2
|
+
puts "file:#{ENV['TBL_FILENAME']}"
|
3
|
+
# Download the file
|
4
|
+
# Implement custom commanding logic to download the table
|
5
|
+
# You probably want to do something like:
|
6
|
+
buffer = ''
|
7
|
+
# i = 1
|
8
|
+
# num_segments = 5 # calculate based on TBL_FILENAME
|
9
|
+
# table_id = 1 # calculate based on TBL_FILENAME
|
10
|
+
# while i < num_segments
|
11
|
+
# # Request a part of the table buffer
|
12
|
+
# cmd("TGT DUMP with TABLE_ID #{table_id}, SEGMENT #{i}")
|
13
|
+
# buffer += tlm("TGT DUMP_PKT DATA")
|
14
|
+
# i += 1
|
15
|
+
# end
|
16
|
+
put_target_file(ENV['TBL_FILENAME'], buffer)
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# TBL_FILENAME is set to the name of the table file
|
2
|
+
puts "file:#{ENV['TBL_FILENAME']}"
|
3
|
+
# Open the file
|
4
|
+
file = get_target_file(ENV['TBL_FILENAME'])
|
5
|
+
buffer = file.read
|
6
|
+
# puts buffer.formatted
|
7
|
+
# Implement custom commanding logic to upload the table
|
8
|
+
# Note that buffer is a Ruby string of bytes
|
9
|
+
# You probably want to do something like:
|
10
|
+
# buf_size = 512 # Size of a buffer in the upload command
|
11
|
+
# i = 0
|
12
|
+
# while i < buffer.length
|
13
|
+
# # Send a part of the buffer
|
14
|
+
# # NOTE: triple dots means start index, up to but not including, end index
|
15
|
+
# # while double dots means start index, up to AND including, end index
|
16
|
+
# cmd("TGT", "UPLOAD", "DATA" => buffer[i...(i + buf_size)])
|
17
|
+
# i += buf_size
|
18
|
+
# end
|
19
|
+
file.delete
|
@@ -0,0 +1,32 @@
|
|
1
|
+
REQUIRE sim_sat.rb
|
2
|
+
|
3
|
+
# Ignored Parameters
|
4
|
+
IGNORE_PARAMETER CCSDSVER
|
5
|
+
IGNORE_PARAMETER CCSDSTYPE
|
6
|
+
IGNORE_PARAMETER CCSDSSHF
|
7
|
+
IGNORE_PARAMETER CCSDSAPID
|
8
|
+
IGNORE_PARAMETER CCSDSSEQFLAGS
|
9
|
+
IGNORE_PARAMETER CCSDSSEQCNT
|
10
|
+
IGNORE_PARAMETER CCSDSLENGTH
|
11
|
+
IGNORE_PARAMETER PKTID
|
12
|
+
|
13
|
+
# Ignored Items
|
14
|
+
IGNORE_ITEM CCSDSVER
|
15
|
+
IGNORE_ITEM CCSDSTYPE
|
16
|
+
IGNORE_ITEM CCSDSSHF
|
17
|
+
IGNORE_ITEM CCSDSAPID
|
18
|
+
IGNORE_ITEM CCSDSSEQFLAGS
|
19
|
+
IGNORE_ITEM CCSDSSEQCNT
|
20
|
+
IGNORE_ITEM CCSDSLENGTH
|
21
|
+
IGNORE_ITEM PACKET_TIME
|
22
|
+
IGNORE_ITEM PACKET_TIMESECONDS
|
23
|
+
IGNORE_ITEM RECEIVED_TIMESECONDS
|
24
|
+
IGNORE_ITEM TIMESEC
|
25
|
+
IGNORE_ITEM TIMEUS
|
26
|
+
IGNORE_ITEM PKTID
|
27
|
+
|
28
|
+
# Explicitly define command and telemetry files
|
29
|
+
# If not given then all the files in cmd/tlm will be processed in
|
30
|
+
# alphabetical order
|
31
|
+
COMMANDS cmds.txt
|
32
|
+
TELEMETRY tlm.txt
|
metadata
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: openc3-cosmos-fakesat
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ryan Melton
|
8
|
+
- Jason Thomas
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2023-01-09 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: " cosmos-fakesat plugin facilitating COSMOS user training\n"
|
15
|
+
email:
|
16
|
+
- ryan@openc3.com
|
17
|
+
- jason@openc3.com
|
18
|
+
executables: []
|
19
|
+
extensions: []
|
20
|
+
extra_rdoc_files: []
|
21
|
+
files:
|
22
|
+
- LICENSE.txt
|
23
|
+
- README.md
|
24
|
+
- Rakefile
|
25
|
+
- plugin.txt
|
26
|
+
- targets/FAKESAT/cmd_tlm/_ccsds_cmd.txt
|
27
|
+
- targets/FAKESAT/cmd_tlm/_ccsds_tlm.txt
|
28
|
+
- targets/FAKESAT/cmd_tlm/cmds.txt
|
29
|
+
- targets/FAKESAT/cmd_tlm/tlm.txt
|
30
|
+
- targets/FAKESAT/data/attitude.bin
|
31
|
+
- targets/FAKESAT/data/position.bin
|
32
|
+
- targets/FAKESAT/lib/fake_sat.rb
|
33
|
+
- targets/FAKESAT/lib/sim_sat.rb
|
34
|
+
- targets/FAKESAT/procedures/fix_fakesat.rb
|
35
|
+
- targets/FAKESAT/procedures/mem_load.rb
|
36
|
+
- targets/FAKESAT/procedures/ops_suite.rb
|
37
|
+
- targets/FAKESAT/procedures/set_override_inject_tlm.rb
|
38
|
+
- targets/FAKESAT/screens/status.txt
|
39
|
+
- targets/FAKESAT/tables/bin/ConfigTables.bin
|
40
|
+
- targets/FAKESAT/tables/config/ConfigTables_def.txt
|
41
|
+
- targets/FAKESAT/tables/config/MCConfigurationTable_def.txt
|
42
|
+
- targets/FAKESAT/tables/config/PPSSelectionTable_def.txt
|
43
|
+
- targets/FAKESAT/tables/config/TLMMonitoringTable_def.txt
|
44
|
+
- targets/FAKESAT/tables/procedures/download.rb
|
45
|
+
- targets/FAKESAT/tables/procedures/upload.rb
|
46
|
+
- targets/FAKESAT/target.txt
|
47
|
+
homepage: https://github.com/OpenC3/cosmos
|
48
|
+
licenses:
|
49
|
+
- AGPL-3.0-only
|
50
|
+
- Nonstandard
|
51
|
+
metadata: {}
|
52
|
+
post_install_message:
|
53
|
+
rdoc_options: []
|
54
|
+
require_paths:
|
55
|
+
- lib
|
56
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '0'
|
61
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
62
|
+
requirements:
|
63
|
+
- - ">="
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
requirements: []
|
67
|
+
rubygems_version: 3.3.7
|
68
|
+
signing_key:
|
69
|
+
specification_version: 4
|
70
|
+
summary: OpenC3 cosmos-fakesat plugin
|
71
|
+
test_files: []
|