diff --git a/.gitmodules b/.gitmodules
index fb53a08b..bba13436 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -131,3 +131,6 @@
path = components/syn
url = https://github.com/nasa-itc/syn.git
branch = main
+[submodule "components/generic_thruster"]
+ path = components/generic_thruster
+ url = https://github.com/nasa-itc/generic_thruster.git
diff --git a/cfg/InOut/Inp_IPC.txt b/cfg/InOut/Inp_IPC.txt
index 1e2bc0d8..d0644602 100644
--- a/cfg/InOut/Inp_IPC.txt
+++ b/cfg/InOut/Inp_IPC.txt
@@ -70,6 +70,16 @@ FALSE ! Allow Blocking (i.e. wait on RX)
FALSE ! Echo to stdout
1 ! Number of TX prefixes
"SC" ! Prefix 0
+********************************** Thruster IPC ****************************
+RX ! IPC Mode (OFF,TX,RX,TXRX,ACS,WRITEFILE,READFILE)
+1 ! AC.ID for ACS mode
+"Thruster.Rx" ! File name for WRITE or READ
+SERVER ! Socket Role (SERVER,CLIENT,GMSEC_CLIENT)
+fortytwo 4280 ! Server Host Name, Port
+FALSE ! Allow Blocking (i.e. wait on RX)
+FALSE ! Echo to stdout
+1 ! Number of TX prefixes
+"SC" ! Prefix 0
********************************** GPS IPC *****************************
TX ! IPC Mode (OFF,TX,RX,TXRX,ACS,WRITEFILE,READFILE)
0 ! AC.ID for ACS mode
diff --git a/cfg/InOut/Nodes_Simple.txt b/cfg/InOut/Nodes_Simple.txt
new file mode 100644
index 00000000..038e50d4
--- /dev/null
+++ b/cfg/InOut/Nodes_Simple.txt
@@ -0,0 +1,8 @@
+<<<<<<<<<<<<<<<< Body Node Inputs for 42 >>>>>>>>>>>>>>>>>>>>>
+Simple Nodes ! Description
+4 ! Number of Nodes
+******************* Node Location, Comment *********************
+ 0.1 -0.4 0.25 "Thrusters"
+ 0.1 -0.1 0.25 "Thrusters"
+ 0.1 -0.4 0.15 "Thrusters"
+ 0.1 -0.1 0.15 "Thrusters"
diff --git a/cfg/InOut/SC_NOS3.txt b/cfg/InOut/SC_NOS3.txt
index 442e8e95..9338b4b7 100644
--- a/cfg/InOut/SC_NOS3.txt
+++ b/cfg/InOut/SC_NOS3.txt
@@ -11,7 +11,7 @@ CM ! Pos of CM or ORIGIN, wrt F
0.0 0.0 0.0 ! Vel wrt Formation (m/s), expressed in F
*************************** Initial Attitude ***************************
NAN ! Ang Vel wrt [NL], Att [QA] wrt [NLF]
-0.3 0.4 0.5 ! Ang Vel (deg/sec)
+0.0 0.0 0.0 ! Ang Vel (deg/sec)
0.0 0.0 0.0 1.0 ! Quaternion
60.0 40.0 20.0 213 ! Angles (deg) & Euler Sequence
*************************** Dynamics Flags ***************************
@@ -34,7 +34,7 @@ NONE ! Shaker File Name
0.0 0.0 0.0 ! Constant Embedded Momentum (Nms)
0.0 0.0 0.0 ! Constant Embedded Magnetic Dipole (A-m^2)
stf1_red.obj ! Geometry Input File Name
-NONE ! Node File Name
+Nodes_Simple.txt ! Node File Name
NONE ! Flex File Name
************************************************************************
*************************** Joint Parameters ***************************
@@ -99,13 +99,31 @@ NONE ! Drag/Jitter Input File Name
0.0 0.0 1.0 ! MTB Axis Components, [X, Y, Z]
0 ! Flex Node Index
************************* Thruster Parameters **************************
-0 ! Number of Thrusters
+4 ! Number of Thrusters
============================== Thr 0 =================================
-PULSED ! Mode (PULSED or PROPORTIONAL)
- 1.0 ! Thrust Force (N)
--1.0 0.0 0.0 ! Thrust Axis
+PROPORTIONAL ! Mode (PULSED or PROPORTIONAL)
+0.01 ! Thrust Force (N)
+1.0 0.0 0.0 ! Thrust Axis
0 ! Body
0 ! Node
+============================== Thr 1 =================================
+PROPORTIONAL ! Mode (PULSED or PROPORTIONAL)
+0.01 ! Thrust Force (N)
+1.0 0.0 0.0 ! Thrust Axis
+0 ! Body
+1 ! Node
+============================== Thr 2 =================================
+PROPORTIONAL ! Mode (PULSED or PROPORTIONAL)
+0.01 ! Thrust Force (N)
+1.0 0.0 0.0 ! Thrust Axis
+0 ! Body
+2 ! Node
+============================== Thr 3 =================================
+PROPORTIONAL ! Mode (PULSED or PROPORTIONAL)
+0.01 ! Thrust Force (N)
+1.0 0.0 0.0 ! Thrust Axis
+0 ! Body
+3 ! Node
******************************* Gyro ************************************
3 ! Number of Gyro Axes
============================== Axis 0 ===================================
diff --git a/cfg/gui/cfg_gui_main.py b/cfg/gui/cfg_gui_main.py
index 232bfacb..0e49b8f3 100644
--- a/cfg/gui/cfg_gui_main.py
+++ b/cfg/gui/cfg_gui_main.py
@@ -90,7 +90,7 @@ def saveText(self, layout:QLayout, config_value:int):
# TODO: change to dynamically pull apps/components from xml file or directory, but how?
applications = ['cf', 'ds', 'fm', 'lc', 'sc']
- components = ['adcs', 'cam', 'css', 'eps', 'fss', 'gps', 'imu', 'mag', 'radio', 'rw', 'sample', 'st', 'syn', 'torquer']
+ components = ['adcs', 'cam', 'css', 'eps', 'fss', 'gps', 'imu', 'mag', 'radio', 'rw', 'sample', 'st', 'syn', 'torquer', 'thruster']
i = 0
while layout.itemAt(i) != None:
diff --git a/cfg/nos3_defs/cpu1_cfe_es_startup.scr b/cfg/nos3_defs/cpu1_cfe_es_startup.scr
index 7a21cddb..db551d53 100644
--- a/cfg/nos3_defs/cpu1_cfe_es_startup.scr
+++ b/cfg/nos3_defs/cpu1_cfe_es_startup.scr
@@ -32,6 +32,7 @@ CFE_APP, novatel_oem615, NOVATEL_AppMain, NAV,
CFE_APP, sample, SAMPLE_AppMain, SAMPLE, 71, 32768, 0x0, 0;
CFE_APP, generic_st, ST_AppMain, ST, 71, 32768, 0x0, 0;
CFE_APP, syn, SYN_AppMain, SYN, 72, 32768, 0x0, 0;
+CFE_APP, generic_thruster, GENERIC_THR_AppMain, THRUSTER, 73, 32768, 0x0, 0;
CFE_LIB, cfs_lib, CFS_LibInit, CFS_LIB, 0, 0, 0x0, 0;
CFE_APP, cs, CS_AppMain, CS, 55, 16384, 0x0, 0;
diff --git a/cfg/nos3_defs/tables/sch_def_msgtbl.c b/cfg/nos3_defs/tables/sch_def_msgtbl.c
index b542284d..90266f3f 100644
--- a/cfg/nos3_defs/tables/sch_def_msgtbl.c
+++ b/cfg/nos3_defs/tables/sch_def_msgtbl.c
@@ -47,6 +47,7 @@
** Component Include Files
*/
#include "cam_msgids.h"
+#include "generic_adcs_msgids.h"
#include "generic_css_msgids.h"
#include "generic_eps_msgids.h"
#include "generic_fss_msgids.h"
@@ -54,12 +55,11 @@
#include "generic_mag_msgids.h"
#include "generic_radio_msgids.h"
#include "generic_reaction_wheel_msgids.h"
+#include "generic_star_tracker_msgids.h"
+#include "generic_thruster_msgids.h"
#include "generic_torquer_msgids.h"
#include "novatel_oem615_msgids.h"
#include "sample_msgids.h"
-#include "generic_adcs_msgids.h"
-#include "generic_star_tracker_msgids.h"
-
#include "syn_msgids.h"
/*
@@ -326,8 +326,8 @@ SCH_MessageEntry_t SCH_DefaultMessageTable[SCH_MAX_MESSAGES] =
{ { CFE_MAKE_BIG16(SCH_UNUSED_MID) } },
/* command ID #104 */
{ { CFE_MAKE_BIG16(SCH_UNUSED_MID) } },
- /* command ID #105 */
- { { CFE_MAKE_BIG16(SCH_UNUSED_MID) } },
+ /* command ID #105 - Thruster HK */
+ { { CFE_MAKE_BIG16(GENERIC_THRUSTER_REQ_HK_MID), CFE_MAKE_BIG16(0xC000), CFE_MAKE_BIG16(0x0001), CFE_MAKE_BIG16(0x0000) } },
/* command ID #106 */
{ { CFE_MAKE_BIG16(SCH_UNUSED_MID) } },
/* command ID #107 */
diff --git a/cfg/nos3_defs/tables/sch_def_schtbl.c b/cfg/nos3_defs/tables/sch_def_schtbl.c
index c54407d4..b9f161d1 100644
--- a/cfg/nos3_defs/tables/sch_def_schtbl.c
+++ b/cfg/nos3_defs/tables/sch_def_schtbl.c
@@ -114,9 +114,9 @@ SCH_ScheduleEntry_t SCH_DefaultScheduleTable[SCH_TABLE_ENTRIES] =
/* slot #3 */
{ SCH_ENABLED, SCH_ACTIVITY_SEND_MSG, 4, 3, 2, SCH_GROUP_CFE_HK }, /* EVS HK Request */
{ SCH_ENABLED, SCH_ACTIVITY_SEND_MSG, 1, 0,101, SCH_GROUP_NONE }, /* ST Data Request */
- { SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
- { SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
- { SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
+ { SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
+ { SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
+ { SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
/* slot #4 */
/*{ SCH_DISABLED, SCH_ACTIVITY_SEND_MSG, 4, 1, 6, SCH_GROUP_CFS_HK }, */ /* CS HK Request */
@@ -187,7 +187,7 @@ SCH_ScheduleEntry_t SCH_DefaultScheduleTable[SCH_TABLE_ENTRIES] =
/* slot #13 */
{ SCH_ENABLED, SCH_ACTIVITY_SEND_MSG, 4, 3, 3, SCH_GROUP_CFE_HK }, /* SB HK Request */
{ SCH_ENABLED, SCH_ACTIVITY_SEND_MSG, 1, 0,101, SCH_GROUP_NONE }, /* ST Data Request */
- { SCH_ENABLED, SCH_ACTIVITY_SEND_MSG, 1, 0,100, SCH_GROUP_NONE }, /* ST Data Request */
+ { SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
@@ -201,7 +201,7 @@ SCH_ScheduleEntry_t SCH_DefaultScheduleTable[SCH_TABLE_ENTRIES] =
/* slot #15 - Component HK */
/*{ SCH_DISABLED, SCH_ACTIVITY_SEND_MSG, 1, 0, 24, SCH_GROUP_MD_WAKEUP }, */ /* MD Wakeup */
{ SCH_ENABLED, SCH_ACTIVITY_SEND_MSG, 1, 0, 45, SCH_GROUP_NONE }, /* RW HK Request */
- { SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
+ { SCH_ENABLED, SCH_ACTIVITY_SEND_MSG, 1, 0,100, SCH_GROUP_NONE }, /* ST HK Request */
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
@@ -261,7 +261,7 @@ SCH_ScheduleEntry_t SCH_DefaultScheduleTable[SCH_TABLE_ENTRIES] =
/* slot #23 */
{ SCH_ENABLED, SCH_ACTIVITY_SEND_MSG, 4, 3, 4, SCH_GROUP_CFE_HK }, /* TIME HK Request */
{ SCH_ENABLED, SCH_ACTIVITY_SEND_MSG, 1, 0,101, SCH_GROUP_NONE }, /* ST Data Request */
- { SCH_ENABLED, SCH_ACTIVITY_SEND_MSG, 1, 0,100, SCH_GROUP_NONE }, /* ST Data Request */
+ { SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
@@ -287,7 +287,6 @@ SCH_ScheduleEntry_t SCH_DefaultScheduleTable[SCH_TABLE_ENTRIES] =
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
- { SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
/* slot #27 */
{ SCH_ENABLED, SCH_ACTIVITY_SEND_MSG, 1, 0, 90, SCH_GROUP_NONE }, /* ADCS ADAC Request */
@@ -335,7 +334,7 @@ SCH_ScheduleEntry_t SCH_DefaultScheduleTable[SCH_TABLE_ENTRIES] =
/* slot #33 */
{ SCH_ENABLED, SCH_ACTIVITY_SEND_MSG, 4, 3, 5, SCH_GROUP_CFE_HK }, /* TBL HK Request */
{ SCH_ENABLED, SCH_ACTIVITY_SEND_MSG, 1, 0,101, SCH_GROUP_NONE }, /* ST Data Request */
- { SCH_ENABLED, SCH_ACTIVITY_SEND_MSG, 1, 0,100, SCH_GROUP_NONE }, /* ST Data Request */
+ { SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
@@ -361,7 +360,6 @@ SCH_ScheduleEntry_t SCH_DefaultScheduleTable[SCH_TABLE_ENTRIES] =
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
- { SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
/* slot #37 */
{ SCH_ENABLED, SCH_ACTIVITY_SEND_MSG, 1, 0, 90, SCH_GROUP_NONE }, /* ADCS ADAC Request */
@@ -410,7 +408,7 @@ SCH_ScheduleEntry_t SCH_DefaultScheduleTable[SCH_TABLE_ENTRIES] =
/* slot #43 */
{ SCH_ENABLED, SCH_ACTIVITY_SEND_MSG, 4, 3, 1, SCH_GROUP_CFE_HK }, /* ES HK Request */
{ SCH_ENABLED, SCH_ACTIVITY_SEND_MSG, 1, 0,101, SCH_GROUP_NONE }, /* ST Data Request */
- { SCH_ENABLED, SCH_ACTIVITY_SEND_MSG, 1, 0,100, SCH_GROUP_NONE }, /* ST Data Request */
+ { SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
@@ -424,7 +422,7 @@ SCH_ScheduleEntry_t SCH_DefaultScheduleTable[SCH_TABLE_ENTRIES] =
/* slot #45 - Component HK */
/*{ SCH_DISABLED, SCH_ACTIVITY_SEND_MSG, 1, 0, 24, SCH_GROUP_MD_WAKEUP }, */ /* MD Wakeup */
{ SCH_ENABLED, SCH_ACTIVITY_SEND_MSG, 5, 1, 60, SCH_GROUP_CFS_HK }, /* FSS HK Request */
- { SCH_ENABLED, SCH_ACTIVITY_SEND_MSG, 1, 0, 61, SCH_GROUP_CFS_HK }, /* FSS Data Request */
+ { SCH_ENABLED, SCH_ACTIVITY_SEND_MSG, 1, 0,105, SCH_GROUP_NONE }, /* Thruster HK Request */
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
@@ -483,7 +481,7 @@ SCH_ScheduleEntry_t SCH_DefaultScheduleTable[SCH_TABLE_ENTRIES] =
/* slot #53 */
{ SCH_ENABLED, SCH_ACTIVITY_SEND_MSG, 1, 0,101, SCH_GROUP_NONE }, /* ST Data Request */
- { SCH_ENABLED, SCH_ACTIVITY_SEND_MSG, 1, 0,100, SCH_GROUP_NONE }, /* ST Data Request */
+ { SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
@@ -555,7 +553,7 @@ SCH_ScheduleEntry_t SCH_DefaultScheduleTable[SCH_TABLE_ENTRIES] =
/* slot #63 */
{ SCH_ENABLED, SCH_ACTIVITY_SEND_MSG, 1, 0,101, SCH_GROUP_NONE }, /* ST Data Request */
- { SCH_ENABLED, SCH_ACTIVITY_SEND_MSG, 1, 0,100, SCH_GROUP_NONE }, /* ST Data Request */
+ { SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
@@ -627,7 +625,7 @@ SCH_ScheduleEntry_t SCH_DefaultScheduleTable[SCH_TABLE_ENTRIES] =
/* slot #73 */
{ SCH_ENABLED, SCH_ACTIVITY_SEND_MSG, 1, 0,101, SCH_GROUP_NONE }, /* ST Data Request */
- { SCH_ENABLED, SCH_ACTIVITY_SEND_MSG, 1, 0,100, SCH_GROUP_NONE }, /* ST Data Request */
+ { SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
@@ -699,7 +697,7 @@ SCH_ScheduleEntry_t SCH_DefaultScheduleTable[SCH_TABLE_ENTRIES] =
/* slot #83 */
{ SCH_ENABLED, SCH_ACTIVITY_SEND_MSG, 1, 0,101, SCH_GROUP_NONE }, /* ST Data Request */
- { SCH_ENABLED, SCH_ACTIVITY_SEND_MSG, 1, 0,100, SCH_GROUP_NONE }, /* ST Data Request */
+ { SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
@@ -775,7 +773,7 @@ SCH_ScheduleEntry_t SCH_DefaultScheduleTable[SCH_TABLE_ENTRIES] =
/* slot #93 */
{ SCH_ENABLED, SCH_ACTIVITY_SEND_MSG, 1, 0,101, SCH_GROUP_NONE }, /* ST Data Request */
- { SCH_ENABLED, SCH_ACTIVITY_SEND_MSG, 1, 0,100, SCH_GROUP_NONE }, /* ST Data Request */
+ { SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
@@ -820,8 +818,8 @@ SCH_ScheduleEntry_t SCH_DefaultScheduleTable[SCH_TABLE_ENTRIES] =
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
- //{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
- //{ SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE}
+ { SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE},
+ { SCH_UNUSED, 0, 0, 0, 0, SCH_GROUP_NONE}
};
/*
diff --git a/cfg/nos3_defs/tables/to_config.c b/cfg/nos3_defs/tables/to_config.c
index af9cd704..e2f1b863 100644
--- a/cfg/nos3_defs/tables/to_config.c
+++ b/cfg/nos3_defs/tables/to_config.c
@@ -69,6 +69,7 @@ extern "C" {
#include "generic_mag_msgids.h"
#include "generic_radio_msgids.h"
#include "generic_reaction_wheel_msgids.h"
+#include "generic_thruster_msgids.h"
#include "generic_torquer_msgids.h"
#include "novatel_oem615_msgids.h"
#include "sample_msgids.h"
@@ -150,7 +151,7 @@ TO_ConfigTable_t to_ConfigTable =
{CFE_SB_MSGID_WRAP_VALUE(GENERIC_ADCS_HK_TLM_MID), {0,0}, 32, 0xffff, TO_GROUP_APP | TO_MGROUP_ONE, 0,1},
{CFE_SB_MSGID_WRAP_VALUE(GENERIC_STAR_TRACKER_HK_TLM_MID),{0,0}, 32, 0xffff, TO_GROUP_APP | TO_MGROUP_ONE, 0,1},
{CFE_SB_MSGID_WRAP_VALUE(GENERIC_STAR_TRACKER_DEVICE_TLM_MID),{0,0}, 32, 0xffff, TO_GROUP_APP | TO_MGROUP_ONE, 0,1},
- {CFE_SB_MSGID_WRAP_VALUE(TO_UNUSED_ENTRY), {0,0}, 0, 0x0000, TO_GROUP_NONE, 0,0},
+ {CFE_SB_MSGID_WRAP_VALUE(GENERIC_THRUSTER_HK_TLM_MID), {0,0}, 32, 0xffff, TO_GROUP_APP | TO_MGROUP_ONE, 0,1},
{CFE_SB_MSGID_WRAP_VALUE(TO_UNUSED_ENTRY), {0,0}, 0, 0x0000, TO_GROUP_NONE, 0,0},
// Commented out to limited ADCS messages sent via radio
diff --git a/cfg/nos3_defs/tables/to_lab_sub.c b/cfg/nos3_defs/tables/to_lab_sub.c
index 9c082dc7..11327d2f 100644
--- a/cfg/nos3_defs/tables/to_lab_sub.c
+++ b/cfg/nos3_defs/tables/to_lab_sub.c
@@ -58,6 +58,7 @@
#include "generic_radio_msgids.h"
#include "generic_reaction_wheel_msgids.h"
#include "generic_torquer_msgids.h"
+#include "generic_thruster_msgids.h"
#include "novatel_oem615_msgids.h"
#include "sample_msgids.h"
#include "generic_adcs_msgids.h"
@@ -127,6 +128,7 @@ TO_LAB_Subs_t TO_LAB_Subs =
{CFE_SB_MSGID_WRAP_VALUE(GENERIC_ADCS_DO_MID), {0,0}, 32},
{CFE_SB_MSGID_WRAP_VALUE(GENERIC_STAR_TRACKER_HK_TLM_MID),{0,0}, 32},
{CFE_SB_MSGID_WRAP_VALUE(GENERIC_STAR_TRACKER_DEVICE_TLM_MID),{0,0}, 32},
+ {CFE_SB_MSGID_WRAP_VALUE(GENERIC_THRUSTER_HK_TLM_MID), {0,0}, 32},
{CFE_SB_MSGID_WRAP_VALUE(SYN_HK_TLM_MID), {0,0}, 32},
diff --git a/cfg/nos3_defs/targets.cmake b/cfg/nos3_defs/targets.cmake
index e1871f9f..5d431828 100644
--- a/cfg/nos3_defs/targets.cmake
+++ b/cfg/nos3_defs/targets.cmake
@@ -113,6 +113,7 @@ list(APPEND MISSION_GLOBAL_APPLIST
generic_reaction_wheel/fsw
generic_radio/fsw
generic_star_tracker/fsw
+ generic_thruster/fsw
generic_torquer/fsw
novatel_oem615/fsw
sample/fsw
diff --git a/cfg/sc-full-config.xml b/cfg/sc-full-config.xml
index c2213c53..67a2917e 100644
--- a/cfg/sc-full-config.xml
+++ b/cfg/sc-full-config.xml
@@ -59,6 +59,9 @@
true
+
+ true
+
true
diff --git a/cfg/sc-minimal-config.xml b/cfg/sc-minimal-config.xml
index cc1d0974..1e8a0d56 100644
--- a/cfg/sc-minimal-config.xml
+++ b/cfg/sc-minimal-config.xml
@@ -59,6 +59,9 @@
false
+
+ false
+
false
diff --git a/cfg/sims/nos3-simulator.xml b/cfg/sims/nos3-simulator.xml
index 69461bce..f6587b44 100644
--- a/cfg/sims/nos3-simulator.xml
+++ b/cfg/sims/nos3-simulator.xml
@@ -422,6 +422,33 @@
+
+ generic_thruster_sim
+ true
+ libgeneric_thruster_sim.so
+
+ GENERIC_THRUSTER
+
+
+ command
+ command
+ thruster-command
+
+ usart
+ usart_29
+ 29
+
+
+
+ GENERIC_THRUSTER_42_PROVIDER
+ fortytwo
+ 4280
+ 0
+ 1
+
+
+
+
truth42sim
true
diff --git a/components/generic_thruster b/components/generic_thruster
new file mode 160000
index 00000000..feb2d655
--- /dev/null
+++ b/components/generic_thruster
@@ -0,0 +1 @@
+Subproject commit feb2d6555fb09e0f1b33a3993819799ad42ce0d5
diff --git a/gsw/cosmos b/gsw/cosmos
index 50c889a4..a8d96bc4 160000
--- a/gsw/cosmos
+++ b/gsw/cosmos
@@ -1 +1 @@
-Subproject commit 50c889a4f6ad21bd0dbc6e32254252a435e57770
+Subproject commit a8d96bc426554cd09ee332e78ea4d5e3982f4623
diff --git a/scripts/configure.py b/scripts/configure.py
index fe14b233..63c25ee9 100755
--- a/scripts/configure.py
+++ b/scripts/configure.py
@@ -79,6 +79,7 @@
sc_st_en = sc_root.find('components/st/enable').text
sc_syn_en = sc_root.find('components/syn/enable').text
sc_torquer_en = sc_root.find('components/torquer/enable').text
+ sc_thruster_en = sc_root.find('components/thruster/enable').text
sc_gui_en = sc_root.find('gui/enable').text
sc_orbit_tipoff_x = sc_root.find('orbit/tipoff_x').text
@@ -114,6 +115,7 @@
st_line = ""
syn_line = ""
torquer_line = ""
+ thruster_line = ""
# Parse lines
for line in lines:
@@ -177,10 +179,14 @@
if line.find('TORQUER,') != -1:
if (sc_torquer_en == 'true'):
torquer_line = line
+ if line.find('THRUSTER,') != -1:
+ if (sc_thruster_en == 'true'):
+ thruster_line = line
# Modify startup script per spacecraft configuration
lines.insert(sc_startup_eof, "\n")
lines.insert(sc_startup_eof, torquer_line)
+ lines.insert(sc_startup_eof, thruster_line)
lines.insert(sc_startup_eof, syn_line)
lines.insert(sc_startup_eof, st_line)
lines.insert(sc_startup_eof, sample_line)
@@ -266,6 +272,7 @@
#sample_index = 999
st_index = 999
torquer_index = 999
+ thruster_index = 999
with open('./cfg/InOut/Inp_IPC.txt', 'r') as fp:
lines = fp.readlines()
@@ -312,6 +319,9 @@
if line.find('Torquer IPC') != -1:
if (lines.index(line)) < torquer_index:
torquer_index = lines.index(line) + 1
+ if line.find('Thruster IPC') != -1:
+ if (lines.index(line)) < thruster_index:
+ thruster_index = lines.index(line) + 1
ipc_off = 'OFF ! IPC Mode (OFF,TX,RX,TXRX,ACS,WRITEFILE,READFILE)\n'
if (sc_css_en != 'true'):
@@ -337,6 +347,8 @@
lines[st_index] = ipc_off
if (sc_torquer_en != 'true'):
lines[torquer_index] = ipc_off
+ if (sc_thruster_en != 'true'):
+ lines[thruster_index] = ipc_off
with open('./cfg/build/InOut/Inp_IPC.txt', 'w') as fp:
lines = "".join(lines)
@@ -359,6 +371,7 @@
sample_index = 999
st_index = 999
torquer_index = 999
+ thruster_index = 999
with open('./cfg/build/sims/nos3-simulator.xml', 'r') as fp:
lines = fp.readlines()
@@ -405,6 +418,9 @@
if line.find('generic_torquer_sim') != -1:
if (lines.index(line)) < torquer_index:
torquer_index = lines.index(line) + 1
+ if line.find('generic_thruster_sim') != -1:
+ if (lines.index(line)) < thruster_index:
+ thruster_index = lines.index(line) + 1
sim_disabled = ' false\n'
if (sc_cam_en != 'true'):
@@ -433,6 +449,8 @@
lines[st_index] = sim_disabled
if (sc_torquer_en != 'true'):
lines[torquer_index] = sim_disabled
+ if (sc_thruster_en != 'true'):
+ lines[thruster_index] = sim_disabled
with open('./cfg/build/sims/nos3-simulator.xml', 'w') as fp:
lines = "".join(lines)
diff --git a/scripts/docker_launch.sh b/scripts/docker_launch.sh
index 5d1caec7..c095f9b7 100755
--- a/scripts/docker_launch.sh
+++ b/scripts/docker_launch.sh
@@ -130,6 +130,7 @@ do
gnome-terminal --tab --title=$SC_NUM" - Sample Sim" -- $DFLAGS -v $SIM_DIR:$SIM_DIR --name $SC_NUM"_sample_sim" --network=$SC_NETNAME -w $SIM_BIN $DBOX ./nos3-single-simulator $SC_CFG_FILE sample_sim
gnome-terminal --tab --title=$SC_NUM" - StarTrk Sim" -- $DFLAGS -v $SIM_DIR:$SIM_DIR --name $SC_NUM"_startrk_sim" --network=$SC_NETNAME -w $SIM_BIN $DBOX ./nos3-single-simulator $SC_CFG_FILE generic_star_tracker_sim
gnome-terminal --tab --title=$SC_NUM" - Torquer Sim" -- $DFLAGS -v $SIM_DIR:$SIM_DIR --name $SC_NUM"_torquer_sim" --network=$SC_NETNAME -w $SIM_BIN $DBOX ./nos3-single-simulator $SC_CFG_FILE generic_torquer_sim
+ gnome-terminal --tab --title=$SC_NUM" - Thruster Sim" -- $DFLAGS -v $SIM_DIR:$SIM_DIR --name $SC_NUM"_thruster_sim" --network=$SC_NETNAME -w $SIM_BIN $DBOX ./nos3-single-simulator $SC_CFG_FILE generic_thruster_sim
echo ""
done
diff --git a/scripts/launch.sh b/scripts/launch.sh
index 662056ac..b55e6efd 100755
--- a/scripts/launch.sh
+++ b/scripts/launch.sh
@@ -50,6 +50,7 @@ gnome-terminal --tab --title='RW 1 Sim' -- $SIM_BIN/nos3-single-simula
gnome-terminal --tab --title='RW 2 Sim' -- $SIM_BIN/nos3-single-simulator generic-reactionwheel-sim2
gnome-terminal --tab --title='Sample Sim' -- $SIM_BIN/nos3-single-simulator sample_sim
gnome-terminal --tab --title='Torquer Sim' -- $SIM_BIN/nos3-single-simulator generic_torquer_sim
+gnome-terminal --tab --title='Thruster Sim' -- $SIM_BIN/nos3-single-simulator generic_thruster_sim
gnome-terminal --tab --title="NOS Time Driver" -- $SIM_BIN/nos3-single-simulator time
gnome-terminal --tab --title="SYNOPSIS Sim" -- $SIM_BIN/nos3-single-simulator synopsis
diff --git a/sims/sim_common b/sims/sim_common
index 5c804f64..8cb9ddcb 160000
--- a/sims/sim_common
+++ b/sims/sim_common
@@ -1 +1 @@
-Subproject commit 5c804f64834e41f02c0660275daca9778f065c24
+Subproject commit 8cb9ddcb5915ee7e286aee0d5e3e0e458f8110a8