openc3-cosmos-fakesat 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -0,0 +1,7 @@
1
+ # This file references table definitions contained in stand alone
2
+ # files. The syntax is:
3
+ # TABLEFILE "FileName_def.txt"
4
+
5
+ TABLEFILE "MCConfigurationTable_def.txt"
6
+ TABLEFILE "TLMMonitoringTable_def.txt"
7
+ TABLEFILE "PPSSelectionTable_def.txt"
@@ -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: []