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
data/README.md
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
# COSMOS Configuration
|
2
|
+
|
3
|
+
See the [OpenC3 COSMOS](https://openc3.com) documentation for all things COSMOS.
|
4
|
+
|
5
|
+
## Building the plugin
|
6
|
+
|
7
|
+
1. <Path to COSMOS installation>\openc3.bat cli rake build VERSION=X.Y.Z
|
8
|
+
- VERSION is required
|
9
|
+
- gem file will be built locally
|
10
|
+
|
11
|
+
## Upload plugin
|
12
|
+
|
13
|
+
1. Go to localhost:2900/tools/admin
|
14
|
+
1. Click the paperclip icon and choose your plugin.gem file
|
15
|
+
1. Click Install on the variables dialog
|
data/Rakefile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
PLUGIN_NAME = Dir['*.gemspec'][0].split('.')[0..-2].join('.')
|
2
|
+
|
3
|
+
task :require_version do
|
4
|
+
if ENV['VERSION']
|
5
|
+
if ENV['VERSION'] =~ /-/
|
6
|
+
# Add Timestamp to prerelease versions
|
7
|
+
ENV['VERSION'] = ENV['VERSION'] + "." + Time.now.utc.strftime("%Y%m%d%H%M%S")
|
8
|
+
end
|
9
|
+
else
|
10
|
+
puts "VERSION is required: rake <task> VERSION=X.X.X"
|
11
|
+
exit 1
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
task :build => [:require_version] do
|
16
|
+
_, platform, *_ = RUBY_PLATFORM.split("-")
|
17
|
+
if platform == 'mswin32' or platform == 'mingw32'
|
18
|
+
puts "Warning: Building gem on Windows will lose file permissions"
|
19
|
+
end
|
20
|
+
system("gem build #{PLUGIN_NAME}")
|
21
|
+
end
|
data/plugin.txt
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
# Set VARIABLEs here to allow variation in your plugin
|
2
|
+
# See https://openc3.com/docs/v5/plugins for more information
|
3
|
+
VARIABLE fakesat_target_name FAKESAT
|
4
|
+
VARIABLE fakesat_int_name FAKESAT_INT
|
5
|
+
|
6
|
+
TARGET FAKESAT <%= fakesat_target_name %>
|
7
|
+
LOG_RETAIN_TIME 360000 # 10 hrs
|
8
|
+
REDUCED_LOG_RETAIN_TIME 360000 # 10hrs
|
9
|
+
TLM_LOG_CYCLE_TIME 300
|
10
|
+
|
11
|
+
INTERFACE <%= fakesat_int_name %> simulated_target_interface.rb sim_sat.rb
|
12
|
+
MAP_TARGET <%= fakesat_target_name %>
|
@@ -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,69 @@
|
|
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 %> SET_MODE BIG_ENDIAN "Change spacecraft mode"
|
21
|
+
<%= render "_ccsds_cmd.txt", locals: {id: 4} %>
|
22
|
+
APPEND_PARAMETER MODE 8 UINT 0 2 0 "Desired Mode"
|
23
|
+
REQUIRED
|
24
|
+
STATE SAFE 0
|
25
|
+
STATE CHECKOUT 1
|
26
|
+
STATE OPERATE 2
|
27
|
+
|
28
|
+
COMMAND <%= target_name %> SLRPNLDEPLOY BIG_ENDIAN "Deploy solar array panel"
|
29
|
+
<%= render "_ccsds_cmd.txt", locals: {id: 5} %>
|
30
|
+
APPEND_PARAMETER NUM 8 UINT 1 2 1 "Solar Array Number"
|
31
|
+
|
32
|
+
COMMAND <%= target_name %> SLRPNLSTOW BIG_ENDIAN "Stow solar array panel"
|
33
|
+
<%= render "_ccsds_cmd.txt", locals: {id: 6} %>
|
34
|
+
APPEND_PARAMETER NUM 8 UINT 1 2 1 "Solar Array Number"
|
35
|
+
|
36
|
+
COMMAND <%= target_name %> SLRPNLANG BIG_ENDIAN "Set Solar Array Panel Angle"
|
37
|
+
<%= render "_ccsds_cmd.txt", locals: {id: 7} %>
|
38
|
+
APPEND_PARAMETER NUM 8 UINT 1 2 1 "Solar Array Number"
|
39
|
+
APPEND_PARAMETER ANG 32 FLOAT 0 360 0 "Solar Array Angle"
|
40
|
+
UNITS DEGREES DEG
|
41
|
+
|
42
|
+
COMMAND <%= target_name %> TABLE_LOAD BIG_ENDIAN "Load table"
|
43
|
+
<%= render "_ccsds_cmd.txt", locals: {id: 8} %>
|
44
|
+
APPEND_PARAMETER DATA 80 BLOCK "" "Table data"
|
45
|
+
|
46
|
+
COMMAND <%= target_name %> HTR_CTRL BIG_ENDIAN "Heater Control ON/OFF"
|
47
|
+
<%= render "_ccsds_cmd.txt", locals: {id: 9} %>
|
48
|
+
APPEND_PARAMETER NUM 8 UINT 1 2 1 "Heater Number"
|
49
|
+
APPEND_PARAMETER STATE 8 UINT 0 1 0 "Desired State"
|
50
|
+
STATE OFF 0 HAZARDOUS
|
51
|
+
STATE ON 1
|
52
|
+
|
53
|
+
COMMAND <%= target_name %> HTR_STATE BIG_ENDIAN "Heater State ON/OFF"
|
54
|
+
<%= render "_ccsds_cmd.txt", locals: {id: 10} %>
|
55
|
+
APPEND_PARAMETER NUM 8 UINT 1 2 1 "Heater Number"
|
56
|
+
APPEND_PARAMETER STATE 8 UINT 0 1 0 "Desired State"
|
57
|
+
STATE OFF 0
|
58
|
+
STATE ON 1
|
59
|
+
|
60
|
+
COMMAND <%= target_name %> HTR_SETPT BIG_ENDIAN "Heater Setpoint"
|
61
|
+
<%= render "_ccsds_cmd.txt", locals: {id: 11} %>
|
62
|
+
APPEND_PARAMETER NUM 8 UINT 1 2 1 "Heater Number"
|
63
|
+
APPEND_PARAMETER SETPT 32 FLOAT -100 100 0 "Setpoint"
|
64
|
+
|
65
|
+
COMMAND <%= target_name %> ADCS_CTRL BIG_ENDIAN "ADCS Control of Solar Panel Angle ON/OFF"
|
66
|
+
<%= render "_ccsds_cmd.txt", locals: {id: 12} %>
|
67
|
+
APPEND_PARAMETER STATE 8 UINT 0 1 0 "Desired State"
|
68
|
+
STATE OFF 0 HAZARDOUS
|
69
|
+
STATE ON 1
|
@@ -0,0 +1,145 @@
|
|
1
|
+
TELEMETRY <%= target_name %> HEALTH_STATUS BIG_ENDIAN "Health and status from the <%= target_name %> target"
|
2
|
+
<%= render "_ccsds_tlm.txt", locals: {apid: 1} %>
|
3
|
+
APPEND_ITEM CMD_ACPT_CNT 32 UINT "Command accept counter"
|
4
|
+
APPEND_ITEM CMD_RJCT_CNT 32 UINT "Command reject counter"
|
5
|
+
APPEND_ITEM MODE 8 UINT "Spacecraft mode"
|
6
|
+
STATE SAFE 0 RED
|
7
|
+
STATE CHECKOUT 1 YELLOW
|
8
|
+
STATE OPERATE 2 GREEN
|
9
|
+
APPEND_ITEM CPU_PWR 32 FLOAT "CPU Power"
|
10
|
+
UNITS WATTS W
|
11
|
+
APPEND_ITEM TABLE_DATA 80 BLOCK "Table Data"
|
12
|
+
ITEM PACKET_TIME 0 0 DERIVED "Ruby time based on TIMESEC and TIMEUS"
|
13
|
+
READ_CONVERSION unix_time_conversion.rb TIMESEC TIMEUS
|
14
|
+
|
15
|
+
TELEMETRY <%= target_name %> THERMAL BIG_ENDIAN "Thermal data"
|
16
|
+
<%= render "_ccsds_tlm.txt", locals: {apid: 2} %>
|
17
|
+
APPEND_ITEM TEMP1 32 FLOAT "Temperature #1"
|
18
|
+
UNITS CELSIUS C
|
19
|
+
FORMAT_STRING "%0.2f"
|
20
|
+
LIMITS DEFAULT 1 ENABLED -10.0 -0.0 40.0 50.0 25.0 35.0
|
21
|
+
APPEND_ITEM TEMP2 32 FLOAT "Temperature #2"
|
22
|
+
UNITS CELSIUS C
|
23
|
+
FORMAT_STRING "%0.2f"
|
24
|
+
LIMITS DEFAULT 1 ENABLED -10.0 -0.0 40.0 50.0 25.0 35.0
|
25
|
+
APPEND_ITEM HEATER1_CTRL 8 UINT "Heater 1 Control ON/OFF"
|
26
|
+
STATE OFF 0
|
27
|
+
STATE ON 1
|
28
|
+
APPEND_ITEM HEATER1_STATE 8 UINT "Heater 1 State ON/OFF"
|
29
|
+
STATE OFF 0
|
30
|
+
STATE ON 1
|
31
|
+
APPEND_ITEM HEATER1_SETPT 32 FLOAT "Heater 1 Setpoint"
|
32
|
+
UNITS CELCIUS C
|
33
|
+
APPEND_ITEM HEATER1_PWR 32 FLOAT "Heater 1 Power"
|
34
|
+
UNITS WATTS W
|
35
|
+
APPEND_ITEM HEATER2_CTRL 8 UINT "Heater 2 Control ON/OFF"
|
36
|
+
STATE OFF 0
|
37
|
+
STATE ON 1
|
38
|
+
APPEND_ITEM HEATER2_STATE 8 UINT "Heater 2 State ON/OFF"
|
39
|
+
STATE OFF 0
|
40
|
+
STATE ON 1
|
41
|
+
APPEND_ITEM HEATER2_SETPT 32 FLOAT "Heater 2 Setpoint"
|
42
|
+
UNITS CELCIUS C
|
43
|
+
APPEND_ITEM HEATER2_PWR 32 FLOAT "Heater 2 Power"
|
44
|
+
UNITS WATTS W
|
45
|
+
ITEM PACKET_TIME 0 0 DERIVED "Ruby time based on TIMESEC and TIMEUS"
|
46
|
+
READ_CONVERSION unix_time_conversion.rb TIMESEC TIMEUS
|
47
|
+
|
48
|
+
TELEMETRY <%= target_name %> ADCS BIG_ENDIAN "Position and attitude data"
|
49
|
+
<%= render "_ccsds_tlm.txt", locals: {apid: 3} %>
|
50
|
+
ITEM POSX 128 32 FLOAT "Position X"
|
51
|
+
UNITS METERS M
|
52
|
+
ITEM POSY 160 32 FLOAT "Position Y"
|
53
|
+
UNITS METERS M
|
54
|
+
ITEM POSZ 192 32 FLOAT "Position Z"
|
55
|
+
UNITS METERS M
|
56
|
+
ITEM VELX 224 32 FLOAT "Velocity X"
|
57
|
+
UNITS METERS_PER_SECOND MPS
|
58
|
+
ITEM VELY 256 32 FLOAT "Velocity Y"
|
59
|
+
UNITS METERS_PER_SECOND MPS
|
60
|
+
ITEM VELZ 288 32 FLOAT "Velocity Z"
|
61
|
+
UNITS METERS_PER_SECOND MPS
|
62
|
+
ITEM Q1 320 32 FLOAT "Quaternion param 1"
|
63
|
+
FORMAT_STRING "%0.6f"
|
64
|
+
ITEM Q2 352 32 FLOAT "Quaternion param 2"
|
65
|
+
FORMAT_STRING "%0.6f"
|
66
|
+
ITEM Q3 384 32 FLOAT "Quaternion param 3"
|
67
|
+
FORMAT_STRING "%0.6f"
|
68
|
+
ITEM Q4 416 32 FLOAT "Quaternion param 4"
|
69
|
+
FORMAT_STRING "%0.6f"
|
70
|
+
ITEM BIASX 448 32 FLOAT "Body X rate bias"
|
71
|
+
FORMAT_STRING "%0.6f"
|
72
|
+
ITEM BIASY 480 32 FLOAT "Body Y rate bias"
|
73
|
+
FORMAT_STRING "%0.6f"
|
74
|
+
ITEM BIASZ 512 32 FLOAT "Body Z rate bias"
|
75
|
+
FORMAT_STRING "%0.6f"
|
76
|
+
<% (1..5).each do |i| %>
|
77
|
+
APPEND_ITEM STAR<%= i %>ID 16 UINT "Star <%= i %> id"
|
78
|
+
<% end %>
|
79
|
+
ITEM POSPROGRESS 624 32 FLOAT "Position file progress"
|
80
|
+
FORMAT_STRING "%0.2f"
|
81
|
+
ITEM ATTPROGRESS 656 32 FLOAT "Attitude file progress"
|
82
|
+
FORMAT_STRING "%0.2f"
|
83
|
+
APPEND_ITEM SR_ANG_TO_SUN 32 FLOAT "Ideal Solar Array Angle to Point at Sun"
|
84
|
+
FORMAT_STRING "%0.2f"
|
85
|
+
APPEND_ITEM ADCS_CTRL 8 UINT "ADCS Control ON/OFF"
|
86
|
+
STATE OFF 0 YELLOW
|
87
|
+
STATE ON 1 GREEN
|
88
|
+
ITEM PACKET_TIME 0 0 DERIVED "Ruby time based on TIMESEC and TIMEUS"
|
89
|
+
READ_CONVERSION unix_time_conversion.rb TIMESEC TIMEUS
|
90
|
+
|
91
|
+
TELEMETRY <%= target_name %> EVENT BIG_ENDIAN "Event packet"
|
92
|
+
<%= render "_ccsds_tlm.txt", locals: {apid: 4} %>
|
93
|
+
APPEND_ITEM MESSAGE 0 STRING "Event Message"
|
94
|
+
ITEM PACKET_TIME 0 0 DERIVED "Ruby time based on TIMESEC and TIMEUS"
|
95
|
+
READ_CONVERSION unix_time_conversion.rb TIMESEC TIMEUS
|
96
|
+
|
97
|
+
TELEMETRY <%= target_name %> IMAGE BIG_ENDIAN "Packet with image data"
|
98
|
+
<%= render "_ccsds_tlm.txt", locals: {apid: 5} %>
|
99
|
+
ITEM BYTES 128 32 UINT "First bytes"
|
100
|
+
FORMAT_STRING '0x%08x'
|
101
|
+
ITEM IMAGE 128 0 BLOCK "Image Data"
|
102
|
+
OVERLAP # Notify OpenC3 that this is intentionally overlapping the BYTES field
|
103
|
+
ITEM PACKET_TIME 0 0 DERIVED "Ruby time based on TIMESEC and TIMEUS"
|
104
|
+
READ_CONVERSION unix_time_conversion.rb TIMESEC TIMEUS
|
105
|
+
|
106
|
+
TELEMETRY <%= target_name %> MECH BIG_ENDIAN "Mechanism status"
|
107
|
+
<%= render "_ccsds_tlm.txt", locals: {apid: 6} %>
|
108
|
+
APPEND_ITEM SLRPNL1_ANG 32 FLOAT "Solar panel 1 angle"
|
109
|
+
UNITS DEGREES DEG
|
110
|
+
APPEND_ITEM SLRPNL2_ANG 32 FLOAT "Solar panel 2 angle"
|
111
|
+
UNITS DEGREES DEG
|
112
|
+
APPEND_ITEM SLRPNL1_STATE 8 UINT "Solar panel 1 state DEPLOYED/STOWED"
|
113
|
+
STATE STOWED 0 YELLOW
|
114
|
+
STATE DEPLOYED 1 GREEN
|
115
|
+
APPEND_ITEM SLRPNL2_STATE 8 UINT "Solar panel 2 state DEPLOYED/STOWED"
|
116
|
+
STATE STOWED 0 YELLOW
|
117
|
+
STATE DEPLOYED 1 GREEN
|
118
|
+
APPEND_ITEM SLRPNL1_PWR 32 FLOAT "Solar panel 1 power"
|
119
|
+
LIMITS DEFAULT 1 ENABLED 50 100 505 510
|
120
|
+
UNITS WATTS W
|
121
|
+
APPEND_ITEM SLRPNL2_PWR 32 FLOAT "Solar panel 2 power"
|
122
|
+
LIMITS DEFAULT 1 ENABLED 50 100 505 510
|
123
|
+
UNITS WATTS W
|
124
|
+
APPEND_ITEM BATTERY 32 FLOAT "Battery Percentage"
|
125
|
+
UNITS PERCENT %
|
126
|
+
LIMITS DEFAULT 1 ENABLED 10 50 105 110
|
127
|
+
FORMAT_STRING "%0.2f"
|
128
|
+
ITEM PACKET_TIME 0 0 DERIVED "Ruby time based on TIMESEC and TIMEUS"
|
129
|
+
READ_CONVERSION unix_time_conversion.rb TIMESEC TIMEUS
|
130
|
+
|
131
|
+
TELEMETRY <%= target_name %> IMAGER BIG_ENDIAN "Imager Status"
|
132
|
+
<%= render "_ccsds_tlm.txt", locals: {apid: 7} %>
|
133
|
+
APPEND_ITEM COLLECTS 16 UINT "Number of collects"
|
134
|
+
APPEND_ITEM DURATION 32 FLOAT "Most recent collect duration"
|
135
|
+
APPEND_ITEM COLLECT_TYPE 16 UINT "Most recent collect type"
|
136
|
+
STATE NORMAL 0
|
137
|
+
STATE SPECIAL 1
|
138
|
+
STATE ERROR ANY
|
139
|
+
APPEND_ITEM IMAGER_STATE 8 UINT "Imager State ON/OFF"
|
140
|
+
STATE OFF 0
|
141
|
+
STATE ON 1
|
142
|
+
APPEND_ITEM IMAGER_PWR 32 FLOAT "Image Power"
|
143
|
+
UNITS WATTS W
|
144
|
+
ITEM PACKET_TIME 0 0 DERIVED "Ruby time based on TIMESEC and TIMEUS"
|
145
|
+
READ_CONVERSION unix_time_conversion.rb TIMESEC TIMEUS
|
Binary file
|
Binary file
|