openc3 5.0.6

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 (307) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +18 -0
  3. data/Guardfile +35 -0
  4. data/LICENSE.txt +727 -0
  5. data/README.md +37 -0
  6. data/Rakefile +131 -0
  7. data/bin/cstol_converter +1178 -0
  8. data/bin/openc3cli +531 -0
  9. data/bin/rubysloc +139 -0
  10. data/data/config/_array_params.yaml +23 -0
  11. data/data/config/_id_items.yaml +24 -0
  12. data/data/config/_id_params.yaml +58 -0
  13. data/data/config/_interfaces.yaml +214 -0
  14. data/data/config/_interfaces.yaml.err +1017 -0
  15. data/data/config/_items.yaml +20 -0
  16. data/data/config/_params.yaml +60 -0
  17. data/data/config/cmd_tlm_server.yaml +136 -0
  18. data/data/config/command.yaml +44 -0
  19. data/data/config/command_modifiers.yaml +160 -0
  20. data/data/config/command_telemetry.yaml +3 -0
  21. data/data/config/interface_modifiers.yaml +104 -0
  22. data/data/config/item_modifiers.yaml +221 -0
  23. data/data/config/microservice.yaml +78 -0
  24. data/data/config/param_item_modifiers.yaml +52 -0
  25. data/data/config/parameter_modifiers.yaml +200 -0
  26. data/data/config/plugins.yaml +80 -0
  27. data/data/config/protocols.yaml +290 -0
  28. data/data/config/screen.yaml +147 -0
  29. data/data/config/table_manager.yaml +89 -0
  30. data/data/config/table_parameter_modifiers.yaml +9 -0
  31. data/data/config/target.yaml +142 -0
  32. data/data/config/target_config.yaml +94 -0
  33. data/data/config/telemetry.yaml +87 -0
  34. data/data/config/telemetry_modifiers.yaml +159 -0
  35. data/data/config/tool.yaml +63 -0
  36. data/data/config/unknown.yaml +3 -0
  37. data/data/config/widgets.yaml +1505 -0
  38. data/ext/mkrf_conf.rb +49 -0
  39. data/ext/openc3/ext/array/array.c +122 -0
  40. data/ext/openc3/ext/array/extconf.rb +13 -0
  41. data/ext/openc3/ext/buffered_file/buffered_file.c +198 -0
  42. data/ext/openc3/ext/buffered_file/extconf.rb +13 -0
  43. data/ext/openc3/ext/config_parser/config_parser.c +280 -0
  44. data/ext/openc3/ext/config_parser/extconf.rb +13 -0
  45. data/ext/openc3/ext/crc/crc.c +351 -0
  46. data/ext/openc3/ext/crc/extconf.rb +13 -0
  47. data/ext/openc3/ext/openc3_io/extconf.rb +13 -0
  48. data/ext/openc3/ext/openc3_io/openc3_io.c +158 -0
  49. data/ext/openc3/ext/packet/extconf.rb +13 -0
  50. data/ext/openc3/ext/packet/packet.c +318 -0
  51. data/ext/openc3/ext/platform/extconf.rb +13 -0
  52. data/ext/openc3/ext/platform/platform.c +134 -0
  53. data/ext/openc3/ext/polynomial_conversion/extconf.rb +13 -0
  54. data/ext/openc3/ext/polynomial_conversion/polynomial_conversion.c +79 -0
  55. data/ext/openc3/ext/string/extconf.rb +13 -0
  56. data/ext/openc3/ext/string/string.c +63 -0
  57. data/ext/openc3/ext/structure/structure.c +1719 -0
  58. data/ext/openc3/ext/tabbed_plots_config/extconf.rb +13 -0
  59. data/ext/openc3/ext/tabbed_plots_config/tabbed_plots_config.c +62 -0
  60. data/ext/openc3/ext/telemetry/extconf.rb +13 -0
  61. data/ext/openc3/ext/telemetry/telemetry.c +336 -0
  62. data/lib/cosmos.rb +20 -0
  63. data/lib/cosmosc2.rb +20 -0
  64. data/lib/openc3/api/api.rb +39 -0
  65. data/lib/openc3/api/authorized_api.rb +30 -0
  66. data/lib/openc3/api/cmd_api.rb +451 -0
  67. data/lib/openc3/api/config_api.rb +58 -0
  68. data/lib/openc3/api/interface_api.rb +117 -0
  69. data/lib/openc3/api/limits_api.rb +375 -0
  70. data/lib/openc3/api/router_api.rb +117 -0
  71. data/lib/openc3/api/settings_api.rb +70 -0
  72. data/lib/openc3/api/target_api.rb +78 -0
  73. data/lib/openc3/api/tlm_api.rb +455 -0
  74. data/lib/openc3/bridge/bridge.rb +54 -0
  75. data/lib/openc3/bridge/bridge_config.rb +167 -0
  76. data/lib/openc3/bridge/bridge_interface_thread.rb +42 -0
  77. data/lib/openc3/bridge/bridge_router_thread.rb +42 -0
  78. data/lib/openc3/ccsds/ccsds_packet.rb +68 -0
  79. data/lib/openc3/ccsds/ccsds_parser.rb +148 -0
  80. data/lib/openc3/config/config_parser.rb +549 -0
  81. data/lib/openc3/config/meta_config_parser.rb +74 -0
  82. data/lib/openc3/conversions/conversion.rb +70 -0
  83. data/lib/openc3/conversions/generic_conversion.rb +83 -0
  84. data/lib/openc3/conversions/packet_time_formatted_conversion.rb +43 -0
  85. data/lib/openc3/conversions/packet_time_seconds_conversion.rb +43 -0
  86. data/lib/openc3/conversions/polynomial_conversion.rb +87 -0
  87. data/lib/openc3/conversions/processor_conversion.rb +70 -0
  88. data/lib/openc3/conversions/received_count_conversion.rb +38 -0
  89. data/lib/openc3/conversions/received_time_formatted_conversion.rb +42 -0
  90. data/lib/openc3/conversions/received_time_seconds_conversion.rb +42 -0
  91. data/lib/openc3/conversions/segmented_polynomial_conversion.rb +171 -0
  92. data/lib/openc3/conversions/unix_time_conversion.rb +68 -0
  93. data/lib/openc3/conversions/unix_time_formatted_conversion.rb +49 -0
  94. data/lib/openc3/conversions/unix_time_seconds_conversion.rb +49 -0
  95. data/lib/openc3/conversions.rb +34 -0
  96. data/lib/openc3/core_ext/array.rb +416 -0
  97. data/lib/openc3/core_ext/binding.rb +29 -0
  98. data/lib/openc3/core_ext/class.rb +72 -0
  99. data/lib/openc3/core_ext/exception.rb +61 -0
  100. data/lib/openc3/core_ext/file.rb +83 -0
  101. data/lib/openc3/core_ext/hash.rb +37 -0
  102. data/lib/openc3/core_ext/io.rb +134 -0
  103. data/lib/openc3/core_ext/kernel.rb +42 -0
  104. data/lib/openc3/core_ext/math.rb +128 -0
  105. data/lib/openc3/core_ext/matrix.rb +156 -0
  106. data/lib/openc3/core_ext/objectspace.rb +36 -0
  107. data/lib/openc3/core_ext/openc3_io.rb +57 -0
  108. data/lib/openc3/core_ext/range.rb +27 -0
  109. data/lib/openc3/core_ext/socket.rb +38 -0
  110. data/lib/openc3/core_ext/string.rb +389 -0
  111. data/lib/openc3/core_ext/stringio.rb +33 -0
  112. data/lib/openc3/core_ext/time.rb +508 -0
  113. data/lib/openc3/core_ext.rb +36 -0
  114. data/lib/openc3/interfaces/interface.rb +498 -0
  115. data/lib/openc3/interfaces/linc_interface.rb +475 -0
  116. data/lib/openc3/interfaces/protocols/burst_protocol.rb +192 -0
  117. data/lib/openc3/interfaces/protocols/crc_protocol.rb +193 -0
  118. data/lib/openc3/interfaces/protocols/fixed_protocol.rb +155 -0
  119. data/lib/openc3/interfaces/protocols/ignore_packet_protocol.rb +56 -0
  120. data/lib/openc3/interfaces/protocols/length_protocol.rb +165 -0
  121. data/lib/openc3/interfaces/protocols/override_protocol.rb +60 -0
  122. data/lib/openc3/interfaces/protocols/preidentified_protocol.rb +206 -0
  123. data/lib/openc3/interfaces/protocols/protocol.rb +82 -0
  124. data/lib/openc3/interfaces/protocols/template_protocol.rb +261 -0
  125. data/lib/openc3/interfaces/protocols/terminated_protocol.rb +93 -0
  126. data/lib/openc3/interfaces/serial_interface.rb +94 -0
  127. data/lib/openc3/interfaces/simulated_target_interface.rb +168 -0
  128. data/lib/openc3/interfaces/stream_interface.rb +81 -0
  129. data/lib/openc3/interfaces/tcpip_client_interface.rb +69 -0
  130. data/lib/openc3/interfaces/tcpip_server_interface.rb +629 -0
  131. data/lib/openc3/interfaces/udp_interface.rb +169 -0
  132. data/lib/openc3/interfaces.rb +44 -0
  133. data/lib/openc3/io/buffered_file.rb +109 -0
  134. data/lib/openc3/io/io_multiplexer.rb +80 -0
  135. data/lib/openc3/io/json_api_object.rb +208 -0
  136. data/lib/openc3/io/json_drb.rb +335 -0
  137. data/lib/openc3/io/json_drb_object.rb +114 -0
  138. data/lib/openc3/io/json_drb_rack.rb +84 -0
  139. data/lib/openc3/io/json_rpc.rb +420 -0
  140. data/lib/openc3/io/openc3_snmp.rb +58 -0
  141. data/lib/openc3/io/posix_serial_driver.rb +156 -0
  142. data/lib/openc3/io/raw_logger.rb +167 -0
  143. data/lib/openc3/io/raw_logger_pair.rb +77 -0
  144. data/lib/openc3/io/serial_driver.rb +105 -0
  145. data/lib/openc3/io/stderr.rb +43 -0
  146. data/lib/openc3/io/stdout.rb +43 -0
  147. data/lib/openc3/io/udp_sockets.rb +194 -0
  148. data/lib/openc3/io/win32_serial_driver.rb +196 -0
  149. data/lib/openc3/logs/log_writer.rb +302 -0
  150. data/lib/openc3/logs/packet_log_constants.rb +62 -0
  151. data/lib/openc3/logs/packet_log_reader.rb +345 -0
  152. data/lib/openc3/logs/packet_log_writer.rb +299 -0
  153. data/lib/openc3/logs/text_log_writer.rb +68 -0
  154. data/lib/openc3/logs.rb +25 -0
  155. data/lib/openc3/microservices/cleanup_microservice.rb +68 -0
  156. data/lib/openc3/microservices/decom_microservice.rb +136 -0
  157. data/lib/openc3/microservices/interface_microservice.rb +532 -0
  158. data/lib/openc3/microservices/log_microservice.rb +108 -0
  159. data/lib/openc3/microservices/microservice.rb +204 -0
  160. data/lib/openc3/microservices/plugin_microservice.rb +43 -0
  161. data/lib/openc3/microservices/reaction_microservice.rb +541 -0
  162. data/lib/openc3/microservices/reducer_microservice.rb +313 -0
  163. data/lib/openc3/microservices/router_microservice.rb +44 -0
  164. data/lib/openc3/microservices/text_log_microservice.rb +84 -0
  165. data/lib/openc3/microservices/timeline_microservice.rb +363 -0
  166. data/lib/openc3/microservices/trigger_group_microservice.rb +638 -0
  167. data/lib/openc3/models/activity_model.rb +319 -0
  168. data/lib/openc3/models/auth_model.rb +65 -0
  169. data/lib/openc3/models/cvt_model.rb +185 -0
  170. data/lib/openc3/models/environment_model.rb +58 -0
  171. data/lib/openc3/models/gem_model.rb +137 -0
  172. data/lib/openc3/models/info_model.rb +31 -0
  173. data/lib/openc3/models/interface_model.rb +281 -0
  174. data/lib/openc3/models/interface_status_model.rb +117 -0
  175. data/lib/openc3/models/metadata_model.rb +139 -0
  176. data/lib/openc3/models/metric_model.rb +59 -0
  177. data/lib/openc3/models/microservice_model.rb +206 -0
  178. data/lib/openc3/models/microservice_status_model.rb +74 -0
  179. data/lib/openc3/models/model.rb +204 -0
  180. data/lib/openc3/models/note_model.rb +122 -0
  181. data/lib/openc3/models/notification_model.rb +40 -0
  182. data/lib/openc3/models/ping_model.rb +35 -0
  183. data/lib/openc3/models/plugin_model.rb +292 -0
  184. data/lib/openc3/models/process_status_model.rb +76 -0
  185. data/lib/openc3/models/reaction_model.rb +322 -0
  186. data/lib/openc3/models/reducer_model.rb +65 -0
  187. data/lib/openc3/models/router_model.rb +35 -0
  188. data/lib/openc3/models/router_status_model.rb +27 -0
  189. data/lib/openc3/models/scope_model.rb +153 -0
  190. data/lib/openc3/models/settings_model.rb +55 -0
  191. data/lib/openc3/models/sorted_model.rb +167 -0
  192. data/lib/openc3/models/target_model.rb +759 -0
  193. data/lib/openc3/models/timeline_model.rb +154 -0
  194. data/lib/openc3/models/tool_config_model.rb +38 -0
  195. data/lib/openc3/models/tool_model.rb +262 -0
  196. data/lib/openc3/models/trigger_group_model.rb +186 -0
  197. data/lib/openc3/models/trigger_model.rb +330 -0
  198. data/lib/openc3/models/widget_model.rb +138 -0
  199. data/lib/openc3/operators/microservice_operator.rb +128 -0
  200. data/lib/openc3/operators/operator.rb +277 -0
  201. data/lib/openc3/packets/binary_accessor.rb +1207 -0
  202. data/lib/openc3/packets/commands.rb +373 -0
  203. data/lib/openc3/packets/json_packet.rb +134 -0
  204. data/lib/openc3/packets/limits.rb +271 -0
  205. data/lib/openc3/packets/limits_response.rb +53 -0
  206. data/lib/openc3/packets/packet.rb +1168 -0
  207. data/lib/openc3/packets/packet_config.rb +625 -0
  208. data/lib/openc3/packets/packet_item.rb +586 -0
  209. data/lib/openc3/packets/packet_item_limits.rb +162 -0
  210. data/lib/openc3/packets/parsers/format_string_parser.rb +65 -0
  211. data/lib/openc3/packets/parsers/limits_parser.rb +159 -0
  212. data/lib/openc3/packets/parsers/limits_response_parser.rb +61 -0
  213. data/lib/openc3/packets/parsers/packet_item_parser.rb +272 -0
  214. data/lib/openc3/packets/parsers/packet_parser.rb +134 -0
  215. data/lib/openc3/packets/parsers/processor_parser.rb +73 -0
  216. data/lib/openc3/packets/parsers/state_parser.rb +127 -0
  217. data/lib/openc3/packets/parsers/xtce_converter.rb +442 -0
  218. data/lib/openc3/packets/parsers/xtce_parser.rb +722 -0
  219. data/lib/openc3/packets/structure.rb +553 -0
  220. data/lib/openc3/packets/structure_item.rb +365 -0
  221. data/lib/openc3/packets/telemetry.rb +487 -0
  222. data/lib/openc3/processors/processor.rb +86 -0
  223. data/lib/openc3/processors/statistics_processor.rb +82 -0
  224. data/lib/openc3/processors/watermark_processor.rb +58 -0
  225. data/lib/openc3/processors.rb +24 -0
  226. data/lib/openc3/script/api_shared.rb +828 -0
  227. data/lib/openc3/script/calendar.rb +89 -0
  228. data/lib/openc3/script/commands.rb +227 -0
  229. data/lib/openc3/script/exceptions.rb +29 -0
  230. data/lib/openc3/script/extract.rb +161 -0
  231. data/lib/openc3/script/limits.rb +60 -0
  232. data/lib/openc3/script/script.rb +299 -0
  233. data/lib/openc3/script/script_runner.rb +238 -0
  234. data/lib/openc3/script/storage.rb +146 -0
  235. data/lib/openc3/script/suite.rb +542 -0
  236. data/lib/openc3/script/suite_results.rb +196 -0
  237. data/lib/openc3/script/suite_runner.rb +217 -0
  238. data/lib/openc3/script.rb +21 -0
  239. data/lib/openc3/streams/serial_stream.rb +167 -0
  240. data/lib/openc3/streams/stream.rb +63 -0
  241. data/lib/openc3/streams/tcpip_client_stream.rb +116 -0
  242. data/lib/openc3/streams/tcpip_socket_stream.rb +195 -0
  243. data/lib/openc3/system/system.rb +127 -0
  244. data/lib/openc3/system/system_config.rb +411 -0
  245. data/lib/openc3/system/target.rb +269 -0
  246. data/lib/openc3/system.rb +24 -0
  247. data/lib/openc3/tools/cmd_tlm_server/api.rb +20 -0
  248. data/lib/openc3/tools/cmd_tlm_server/cmd_tlm_server_config.rb +320 -0
  249. data/lib/openc3/tools/cmd_tlm_server/interface_thread.rb +294 -0
  250. data/lib/openc3/tools/table_manager/table.rb +77 -0
  251. data/lib/openc3/tools/table_manager/table_config.rb +273 -0
  252. data/lib/openc3/tools/table_manager/table_item.rb +90 -0
  253. data/lib/openc3/tools/table_manager/table_item_parser.rb +66 -0
  254. data/lib/openc3/tools/table_manager/table_manager_core.rb +333 -0
  255. data/lib/openc3/tools/table_manager/table_parser.rb +93 -0
  256. data/lib/openc3/tools/test_runner/test.rb +67 -0
  257. data/lib/openc3/top_level.rb +595 -0
  258. data/lib/openc3/topics/autonomic_topic.rb +52 -0
  259. data/lib/openc3/topics/calendar_topic.rb +44 -0
  260. data/lib/openc3/topics/command_decom_topic.rb +76 -0
  261. data/lib/openc3/topics/command_topic.rb +83 -0
  262. data/lib/openc3/topics/config_topic.rb +68 -0
  263. data/lib/openc3/topics/interface_topic.rb +73 -0
  264. data/lib/openc3/topics/limits_event_topic.rb +109 -0
  265. data/lib/openc3/topics/notifications_topic.rb +28 -0
  266. data/lib/openc3/topics/router_topic.rb +85 -0
  267. data/lib/openc3/topics/telemetry_decom_topic.rb +54 -0
  268. data/lib/openc3/topics/telemetry_topic.rb +36 -0
  269. data/lib/openc3/topics/timeline_topic.rb +45 -0
  270. data/lib/openc3/topics/topic.rb +53 -0
  271. data/lib/openc3/utilities/authentication.rb +141 -0
  272. data/lib/openc3/utilities/authorization.rb +51 -0
  273. data/lib/openc3/utilities/crc.rb +278 -0
  274. data/lib/openc3/utilities/csv.rb +153 -0
  275. data/lib/openc3/utilities/logger.rb +187 -0
  276. data/lib/openc3/utilities/message_log.rb +91 -0
  277. data/lib/openc3/utilities/metric.rb +141 -0
  278. data/lib/openc3/utilities/process_manager.rb +139 -0
  279. data/lib/openc3/utilities/quaternion.rb +257 -0
  280. data/lib/openc3/utilities/ruby_lex_utils.rb +568 -0
  281. data/lib/openc3/utilities/s3.rb +202 -0
  282. data/lib/openc3/utilities/s3_autoload.rb +9 -0
  283. data/lib/openc3/utilities/s3_file_cache.rb +274 -0
  284. data/lib/openc3/utilities/simulated_target.rb +117 -0
  285. data/lib/openc3/utilities/sleeper.rb +51 -0
  286. data/lib/openc3/utilities/store.rb +23 -0
  287. data/lib/openc3/utilities/store_autoload.rb +237 -0
  288. data/lib/openc3/utilities/zip.rb +21 -0
  289. data/lib/openc3/utilities.rb +35 -0
  290. data/lib/openc3/version.rb +14 -0
  291. data/lib/openc3/win32/excel.rb +132 -0
  292. data/lib/openc3/win32/win32.rb +402 -0
  293. data/lib/openc3/win32/win32_main.rb +333 -0
  294. data/lib/openc3.rb +49 -0
  295. data/tasks/gemfile_stats.rake +113 -0
  296. data/tasks/spec.rake +30 -0
  297. data/templates/plugin-template/README.md +15 -0
  298. data/templates/plugin-template/Rakefile +12 -0
  299. data/templates/plugin-template/plugin.gemspec +23 -0
  300. data/templates/plugin-template/plugin.txt +9 -0
  301. data/templates/plugin-template/targets/TARGET/cmd_tlm/cmd.txt +8 -0
  302. data/templates/plugin-template/targets/TARGET/cmd_tlm/tlm.txt +8 -0
  303. data/templates/plugin-template/targets/TARGET/lib/target.rb +10 -0
  304. data/templates/plugin-template/targets/TARGET/procedures/procedure.rb +3 -0
  305. data/templates/plugin-template/targets/TARGET/screens/status.txt +9 -0
  306. data/templates/plugin-template/targets/TARGET/target.txt +5 -0
  307. metadata +849 -0
@@ -0,0 +1,13 @@
1
+ require 'mkmf'
2
+
3
+ unless $CFLAGS.gsub!(/ -O[\dsz]?/, ' -O3')
4
+ $CFLAGS << ' -O3'
5
+ end
6
+ if /gcc/.match?(CONFIG['CC'])
7
+ $CFLAGS << ' -Wall'
8
+ if $DEBUG && !$CFLAGS.gsub!(/ -O[\dsz]?/, ' -O0 -ggdb')
9
+ $CFLAGS << ' -O0 -ggdb'
10
+ end
11
+ end
12
+
13
+ create_makefile 'openc3/ext/tabbed_plots_config'
@@ -0,0 +1,62 @@
1
+ /*
2
+ # Copyright 2022 Ball Aerospace & Technologies Corp.
3
+ # All Rights Reserved.
4
+ #
5
+ # This program is free software; you can modify and/or redistribute it
6
+ # under the terms of the GNU Affero General Public License
7
+ # as published by the Free Software Foundation; version 3 with
8
+ # attribution addendums as found in the LICENSE.txt
9
+ #
10
+ # This program is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU Affero General Public License for more details.
14
+ */
15
+
16
+ /*
17
+ # Modified by OpenC3, Inc.
18
+ # All changes Copyright 2022, OpenC3, Inc.
19
+ # All Rights Reserved
20
+ */
21
+
22
+ #include "ruby.h"
23
+ #include "stdio.h"
24
+
25
+ VALUE mOpenC3;
26
+ VALUE cTabbedPlotsConfig;
27
+
28
+ static ID id_method_process_packet = 0;
29
+
30
+ /*
31
+ * Optimization method to move each call to C code
32
+ */
33
+ static VALUE process_packet_in_each_data_object(VALUE self, VALUE data_objects, VALUE packet, VALUE packet_count)
34
+ {
35
+ int index = 0;
36
+ long length = 0;
37
+ volatile VALUE data_object = Qnil;
38
+
39
+ length = RARRAY_LEN(data_objects);
40
+ if (length > 0)
41
+ {
42
+ for (index = 0; index < length; index++)
43
+ {
44
+ data_object = rb_ary_entry(data_objects, index);
45
+ rb_funcall(data_object, id_method_process_packet, 2, packet, packet_count);
46
+ }
47
+ }
48
+
49
+ return Qnil;
50
+ }
51
+
52
+ /*
53
+ * Initialize methods for TabbedPlotsConfig
54
+ */
55
+ void Init_tabbed_plots_config(void)
56
+ {
57
+ id_method_process_packet = rb_intern("process_packet");
58
+
59
+ mOpenC3 = rb_define_module("OpenC3");
60
+ cTabbedPlotsConfig = rb_define_class_under(mOpenC3, "TabbedPlotsConfig", rb_cObject);
61
+ rb_define_method(cTabbedPlotsConfig, "process_packet_in_each_data_object", process_packet_in_each_data_object, 3);
62
+ }
@@ -0,0 +1,13 @@
1
+ require 'mkmf'
2
+
3
+ unless $CFLAGS.gsub!(/ -O[\dsz]?/, ' -O3')
4
+ $CFLAGS << ' -O3'
5
+ end
6
+ if /gcc/.match?(CONFIG['CC'])
7
+ $CFLAGS << ' -Wall'
8
+ if $DEBUG && !$CFLAGS.gsub!(/ -O[\dsz]?/, ' -O0 -ggdb')
9
+ $CFLAGS << ' -O0 -ggdb'
10
+ end
11
+ end
12
+
13
+ create_makefile 'openc3/ext/telemetry'
@@ -0,0 +1,336 @@
1
+ /*
2
+ # Copyright 2022 Ball Aerospace & Technologies Corp.
3
+ # All Rights Reserved.
4
+ #
5
+ # This program is free software; you can modify and/or redistribute it
6
+ # under the terms of the GNU Affero General Public License
7
+ # as published by the Free Software Foundation; version 3 with
8
+ # attribution addendums as found in the LICENSE.txt
9
+ #
10
+ # This program is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU Affero General Public License for more details.
14
+ */
15
+
16
+ /*
17
+ # Modified by OpenC3, Inc.
18
+ # All changes Copyright 2022, OpenC3, Inc.
19
+ # All Rights Reserved
20
+ */
21
+
22
+ #include "ruby.h"
23
+ #include "stdio.h"
24
+
25
+ VALUE mOpenC3;
26
+ VALUE cTelemetry;
27
+ VALUE cSystem;
28
+
29
+ static ID id_ivar_config = 0;
30
+ static ID id_method_telemetry = 0;
31
+ static ID id_method_read = 0;
32
+ static ID id_method_to_s = 0;
33
+ static ID id_method_intern = 0;
34
+ static ID id_method_get_item = 0;
35
+ static ID id_method_upcase = 0;
36
+ static ID id_method_newest_packet = 0;
37
+ static ID id_method_limits = 0;
38
+ static ID id_method_state = 0;
39
+ static ID id_method_limits_set = 0;
40
+ static ID id_method_values = 0;
41
+ static VALUE symbol_CONVERTED = Qnil;
42
+
43
+ /*
44
+ * @param target_name [String] The target name
45
+ *@return [Hash<packet_name=>Packet>] Hash of the telemetry packets for the given
46
+ * target name keyed by the packet name
47
+ */
48
+ static VALUE packets(VALUE self, VALUE target_name)
49
+ {
50
+ volatile VALUE target_packets = Qnil;
51
+ volatile VALUE upcase_target_name = Qnil;
52
+ volatile VALUE telemetry = Qnil;
53
+
54
+ upcase_target_name = rb_funcall(target_name, id_method_to_s, 0);
55
+ upcase_target_name = rb_funcall(upcase_target_name, id_method_upcase, 0);
56
+ telemetry = rb_funcall(rb_ivar_get(self, id_ivar_config), id_method_telemetry, 0);
57
+ target_packets = rb_hash_aref(telemetry, upcase_target_name);
58
+
59
+ if (!(RTEST(target_packets)))
60
+ {
61
+ rb_raise(rb_eRuntimeError, "Telemetry target '%s' does not exist", RSTRING_PTR(upcase_target_name));
62
+ }
63
+
64
+ return target_packets;
65
+ }
66
+
67
+ /*
68
+ * @param target_name [String] The target name
69
+ * @param packet_name [String] The packet name. Must be a defined packet name
70
+ * and not 'LATEST'.
71
+ *@return [Packet] The telemetry packet for the given target and packet name
72
+ */
73
+ static VALUE packet(VALUE self, VALUE target_name, VALUE packet_name)
74
+ {
75
+ volatile VALUE packet = Qnil;
76
+ volatile VALUE target_packets = Qnil;
77
+ volatile VALUE upcase_target_name = Qnil;
78
+ volatile VALUE upcase_packet_name = Qnil;
79
+
80
+ target_packets = packets(self, target_name);
81
+
82
+ upcase_packet_name = rb_funcall(packet_name, id_method_to_s, 0);
83
+ upcase_packet_name = rb_funcall(upcase_packet_name, id_method_upcase, 0);
84
+ packet = rb_hash_aref(target_packets, upcase_packet_name);
85
+ if (!(RTEST(packet)))
86
+ {
87
+ upcase_target_name = rb_funcall(target_name, id_method_to_s, 0);
88
+ upcase_target_name = rb_funcall(upcase_target_name, id_method_upcase, 0);
89
+ rb_raise(rb_eRuntimeError, "Telemetry packet '%s %s' does not exist", RSTRING_PTR(upcase_target_name), RSTRING_PTR(upcase_packet_name));
90
+ }
91
+
92
+ return packet;
93
+ }
94
+
95
+ /*
96
+ * @param target_name (see #packet)
97
+ * @param packet_name [String] The packet name. 'LATEST' can also be given
98
+ * to specify the last received (or defined if no packets have been
99
+ * received) packet within the given target that contains the
100
+ * item_name.
101
+ * @param item_name [String] The item name
102
+ * @return [Packet, PacketItem] The packet and the packet item
103
+ */
104
+ static VALUE packet_and_item(VALUE self, VALUE target_name, VALUE packet_name, VALUE item_name)
105
+ {
106
+ volatile VALUE upcase_packet_name = Qnil;
107
+ volatile VALUE return_packet = Qnil;
108
+ volatile VALUE item = Qnil;
109
+ volatile VALUE return_value = Qnil;
110
+ char *string_packet_name = NULL;
111
+
112
+ upcase_packet_name = rb_funcall(packet_name, id_method_upcase, 0);
113
+ string_packet_name = RSTRING_PTR(upcase_packet_name);
114
+ if (strcmp(string_packet_name, "LATEST") == 0)
115
+ {
116
+ return_packet = rb_funcall(self, id_method_newest_packet, 2, target_name, item_name);
117
+ }
118
+ else
119
+ {
120
+ return_packet = packet(self, target_name, packet_name);
121
+ }
122
+
123
+ item = rb_funcall(return_packet, id_method_get_item, 1, item_name);
124
+
125
+ return_value = rb_ary_new();
126
+ rb_ary_push(return_value, return_packet);
127
+ rb_ary_push(return_value, item);
128
+ return return_value;
129
+ }
130
+
131
+ /*
132
+ * Return a telemetry value from a packet.
133
+ *
134
+ * @param target_name (see #packet_and_item)
135
+ * @param packet_name (see #packet_and_item)
136
+ * @param item_name (see #packet_and_item)
137
+ * @param value_type [Symbol] How to convert the item before returning.
138
+ * Must be one of {Packet::VALUE_TYPES}
139
+ * @return The value. :FORMATTED and :WITH_UNITS values are always returned
140
+ * as Strings. :RAW values will match their data_type. :CONVERTED values
141
+ * can be any type.
142
+ */
143
+ static VALUE value(int argc, VALUE *argv, VALUE self)
144
+ {
145
+ volatile VALUE target_name = Qnil;
146
+ volatile VALUE packet_name = Qnil;
147
+ volatile VALUE item_name = Qnil;
148
+ volatile VALUE value_type = Qnil;
149
+ volatile VALUE result = Qnil;
150
+ volatile VALUE packet = Qnil;
151
+
152
+ switch (argc)
153
+ {
154
+ case 3:
155
+ target_name = argv[0];
156
+ packet_name = argv[1];
157
+ item_name = argv[2];
158
+ value_type = symbol_CONVERTED;
159
+ break;
160
+ case 4:
161
+ target_name = argv[0];
162
+ packet_name = argv[1];
163
+ item_name = argv[2];
164
+ value_type = argv[3];
165
+ break;
166
+ default:
167
+ /* Invalid number of arguments given */
168
+ rb_raise(rb_eArgError, "wrong number of arguments (%d for 3..4)", argc);
169
+ break;
170
+ };
171
+
172
+ result = packet_and_item(self, target_name, packet_name, item_name);
173
+ packet = rb_ary_entry(result, 0);
174
+ return rb_funcall(packet, id_method_read, 2, item_name, value_type);
175
+ }
176
+
177
+ /*
178
+ * Reads the specified list of items and returns their values and limits
179
+ * state.
180
+ *
181
+ * @param item_array [Array<Array(String String String)>] An array
182
+ * consisting of [target name, packet name, item name]
183
+ * @param value_types [Symbol|Array<Symbol>] How to convert the items before
184
+ * returning. A single symbol of {Packet::VALUE_TYPES}
185
+ * can be passed which will convert all items the same way. Or
186
+ * an array of symbols can be passed to control how each item is
187
+ * converted.
188
+ * @return [Array, Array, Array] The first array contains the item values, the
189
+ * second their limits state, and the third the limits settings which includes
190
+ * red, yellow, and green (if given) limits values.
191
+ */
192
+ static VALUE values_and_limits_states(int argc, VALUE *argv, VALUE self)
193
+ {
194
+ volatile VALUE item_array = Qnil;
195
+ volatile VALUE value_types = Qnil;
196
+ volatile VALUE items = Qnil;
197
+ volatile VALUE states = Qnil;
198
+ volatile VALUE settings = Qnil;
199
+ volatile VALUE entry = Qnil;
200
+ volatile VALUE target_name = Qnil;
201
+ volatile VALUE packet_name = Qnil;
202
+ volatile VALUE item_name = Qnil;
203
+ volatile VALUE value_type = Qnil;
204
+ volatile VALUE result = Qnil;
205
+ volatile VALUE return_value = Qnil;
206
+ volatile VALUE limits = Qnil;
207
+ volatile VALUE limits_set = Qnil;
208
+ volatile VALUE limits_values = Qnil;
209
+ volatile VALUE limits_settings = Qnil;
210
+ long length = 0;
211
+ long value_types_length = 0;
212
+ int index = 0;
213
+
214
+ switch (argc)
215
+ {
216
+ case 1:
217
+ item_array = argv[0];
218
+ value_types = symbol_CONVERTED;
219
+ break;
220
+ case 2:
221
+ item_array = argv[0];
222
+ value_types = argv[1];
223
+ break;
224
+ default:
225
+ /* Invalid number of arguments given */
226
+ rb_raise(rb_eArgError, "wrong number of arguments (%d for 1..2)", argc);
227
+ break;
228
+ };
229
+
230
+ items = rb_ary_new();
231
+ /* Verify items is a nested array */
232
+ entry = rb_ary_entry(item_array, index);
233
+ if (TYPE(entry) != T_ARRAY)
234
+ {
235
+ rb_raise(rb_eArgError, "item_array must be a nested array consisting of [[tgt,pkt,item],[tgt,pkt,item],...]");
236
+ }
237
+ states = rb_ary_new();
238
+ settings = rb_ary_new();
239
+ limits_set = rb_funcall(cSystem, id_method_limits_set, 0);
240
+ length = RARRAY_LEN(item_array);
241
+ if (TYPE(value_types) == T_ARRAY)
242
+ {
243
+ value_types_length = RARRAY_LEN(value_types);
244
+ if (length != value_types_length)
245
+ {
246
+ rb_raise(rb_eArgError, "Passed %ld items but only %ld value types", length, value_types_length);
247
+ }
248
+
249
+ for (index = 0; index < length; index++)
250
+ {
251
+ entry = rb_ary_entry(item_array, index);
252
+ target_name = rb_ary_entry(entry, 0);
253
+ packet_name = rb_ary_entry(entry, 1);
254
+ item_name = rb_ary_entry(entry, 2);
255
+ value_type = rb_ary_entry(value_types, index);
256
+ value_type = rb_funcall(value_type, id_method_intern, 0);
257
+
258
+ result = packet_and_item(self, target_name, packet_name, item_name);
259
+ rb_ary_push(items, rb_funcall(rb_ary_entry(result, 0), id_method_read, 2, item_name, value_type));
260
+ limits = rb_funcall(rb_ary_entry(result, 1), id_method_limits, 0);
261
+ rb_ary_push(states, rb_funcall(limits, id_method_state, 0));
262
+ limits_values = rb_funcall(limits, id_method_values, 0);
263
+ if (RTEST(limits_values))
264
+ {
265
+ limits_settings = rb_hash_aref(limits_values, limits_set);
266
+ }
267
+ else
268
+ {
269
+ limits_settings = Qnil;
270
+ }
271
+ rb_ary_push(settings, limits_settings);
272
+ }
273
+ }
274
+ else
275
+ {
276
+ value_type = rb_funcall(value_types, id_method_intern, 0);
277
+ for (index = 0; index < length; index++)
278
+ {
279
+ entry = rb_ary_entry(item_array, index);
280
+ target_name = rb_ary_entry(entry, 0);
281
+ packet_name = rb_ary_entry(entry, 1);
282
+ item_name = rb_ary_entry(entry, 2);
283
+
284
+ result = packet_and_item(self, target_name, packet_name, item_name);
285
+ rb_ary_push(items, rb_funcall(rb_ary_entry(result, 0), id_method_read, 2, item_name, value_type));
286
+ limits = rb_funcall(rb_ary_entry(result, 1), id_method_limits, 0);
287
+ rb_ary_push(states, rb_funcall(limits, id_method_state, 0));
288
+ limits_values = rb_funcall(limits, id_method_values, 0);
289
+ if (RTEST(limits_values))
290
+ {
291
+ limits_settings = rb_hash_aref(limits_values, limits_set);
292
+ }
293
+ else
294
+ {
295
+ limits_settings = Qnil;
296
+ }
297
+ rb_ary_push(settings, limits_settings);
298
+ }
299
+ }
300
+
301
+ return_value = rb_ary_new2(3);
302
+ rb_ary_push(return_value, items);
303
+ rb_ary_push(return_value, states);
304
+ rb_ary_push(return_value, settings);
305
+ return return_value;
306
+ }
307
+
308
+ /*
309
+ * Initialize methods for Telemetry
310
+ */
311
+ void Init_telemetry(void)
312
+ {
313
+ id_ivar_config = rb_intern("@config");
314
+ id_method_telemetry = rb_intern("telemetry");
315
+ id_method_read = rb_intern("read");
316
+ id_method_to_s = rb_intern("to_s");
317
+ id_method_intern = rb_intern("intern");
318
+ id_method_get_item = rb_intern("get_item");
319
+ id_method_upcase = rb_intern("upcase");
320
+ id_method_newest_packet = rb_intern("newest_packet");
321
+ id_method_limits = rb_intern("limits");
322
+ id_method_state = rb_intern("state");
323
+ id_method_limits_set = rb_intern("limits_set");
324
+ id_method_values = rb_intern("values");
325
+ symbol_CONVERTED = ID2SYM(rb_intern("CONVERTED"));
326
+
327
+ mOpenC3 = rb_define_module("OpenC3");
328
+ cTelemetry = rb_define_class_under(mOpenC3, "Telemetry", rb_cObject);
329
+ rb_define_method(cTelemetry, "packets", packets, 1);
330
+ rb_define_method(cTelemetry, "packet", packet, 2);
331
+ rb_define_method(cTelemetry, "packet_and_item", packet_and_item, 3);
332
+ rb_define_method(cTelemetry, "value", value, -1);
333
+ rb_define_method(cTelemetry, "values_and_limits_states", values_and_limits_states, -1);
334
+
335
+ cSystem = rb_define_class_under(mOpenC3, "System", rb_cObject);
336
+ }
data/lib/cosmos.rb ADDED
@@ -0,0 +1,20 @@
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'
data/lib/cosmosc2.rb ADDED
@@ -0,0 +1,20 @@
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'
@@ -0,0 +1,39 @@
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/script/extract'
21
+ require 'openc3/script/api_shared'
22
+ require 'openc3/api/cmd_api'
23
+ require 'openc3/api/config_api'
24
+ require 'openc3/api/interface_api'
25
+ require 'openc3/api/limits_api'
26
+ require 'openc3/api/router_api'
27
+ require 'openc3/api/settings_api'
28
+ require 'openc3/api/target_api'
29
+ require 'openc3/api/tlm_api'
30
+ require 'openc3/utilities/authorization'
31
+ require 'openc3/topics/topic'
32
+
33
+ module OpenC3
34
+ module Api
35
+ include Extract
36
+ include Authorization
37
+ include ApiShared
38
+ end
39
+ end
@@ -0,0 +1,30 @@
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/api/api'
21
+
22
+ module OpenC3
23
+ module AuthorizedApi
24
+ include Api
25
+
26
+ def self.included(base)
27
+ $openc3_authorize = true
28
+ end
29
+ end
30
+ end