From 25bc587774805affffe4b028ba7f455b1249e449 Mon Sep 17 00:00:00 2001 From: Dan Date: Fri, 12 May 2023 15:24:30 -0400 Subject: [PATCH] Fix #143, Add support for cmds w/args --- fsw/platform_inc/sch_lab_table.h | 18 +++++- fsw/src/sch_lab_app.c | 18 +++++- fsw/tables/sch_lab_table.c | 106 +++++++++++++------------------ 3 files changed, 76 insertions(+), 66 deletions(-) diff --git a/fsw/platform_inc/sch_lab_table.h b/fsw/platform_inc/sch_lab_table.h index 8cb46fc..c37d675 100644 --- a/fsw/platform_inc/sch_lab_table.h +++ b/fsw/platform_inc/sch_lab_table.h @@ -36,14 +36,26 @@ #define SCH_LAB_MAX_SCHEDULE_ENTRIES 32 #define SCH_TBL_DEFAULT_FILE "/cf/sch_lab_table.tbl" +#define SCH_MAX_MSG_WORDS 32 + +#ifdef SOFTWARE_BIG_BIT_ORDER +#define SCH_PACK_32BIT(value) \ +(uint16)((value & 0xFFFF0000) >> 16), (uint16)(value & 0x0000FFFF) +#else +#define SCH_PACK_32BIT(value) \ +(uint16)(value & 0x0000FFFF), (uint16)((value & 0xFFFF0000) >> 16) +#endif + /* ** Typedefs */ typedef struct { - CFE_SB_MsgId_t MessageID; /* Message ID for the table entry */ - uint32 PacketRate; /* Rate: Send packet every N ticks */ - CFE_MSG_FcnCode_t FcnCode; /* Command/Function code to set */ + CFE_SB_MsgId_t MessageID; /* Message ID for the table entry */ + uint32 PacketRate; /* Rate: Send packet every N ticks */ + CFE_MSG_FcnCode_t FcnCode; /* Command/Function code to set */ + uint16 PayloadLength; /* Length of additional command args */ + uint16 MessageBuffer[SCH_MAX_MSG_WORDS]; /* Command args in 16 bit words */ } SCH_LAB_ScheduleTableEntry_t; typedef struct diff --git a/fsw/src/sch_lab_app.c b/fsw/src/sch_lab_app.c index 84e6772..d699768 100644 --- a/fsw/src/sch_lab_app.c +++ b/fsw/src/sch_lab_app.c @@ -46,6 +46,8 @@ typedef struct { CFE_MSG_CommandHeader_t CommandHeader; + uint16 MessageBuffer[SCH_MAX_MSG_WORDS]; + uint16 PayloadLength; uint32 PacketRate; uint32 Counter; } SCH_LAB_StateEntry_t; @@ -64,6 +66,7 @@ typedef struct */ SCH_LAB_GlobalData_t SCH_LAB_Global; + /* ** Local Function Prototypes */ @@ -121,6 +124,7 @@ void SCH_Lab_AppMain(void) ** Process table every tick, sending packets that are ready */ LocalStateEntry = SCH_LAB_Global.State; + for (i = 0; i < SCH_LAB_MAX_SCHEDULE_ENTRIES; i++) { if (LocalStateEntry->PacketRate != 0) @@ -153,7 +157,7 @@ void SCH_LAB_LocalTimerCallback(osal_id_t object_id, void *arg) /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ int32 SCH_LAB_AppInit(void) { - int i; + int i, x; int32 Status; int32 OsStatus; uint32 TimerPeriod; @@ -233,14 +237,24 @@ int32 SCH_LAB_AppInit(void) ConfigTable = TableAddr; ConfigEntry = ConfigTable->Config; LocalStateEntry = SCH_LAB_Global.State; + + /* Populate the CCSDS message and move the message content into the proper user data space. */ for (i = 0; i < SCH_LAB_MAX_SCHEDULE_ENTRIES; i++) { if (ConfigEntry->PacketRate != 0) { + /* Initialize the message with the length of the header + payload */ CFE_MSG_Init(CFE_MSG_PTR(LocalStateEntry->CommandHeader), ConfigEntry->MessageID, - sizeof(LocalStateEntry->CommandHeader)); + sizeof(LocalStateEntry->CommandHeader) + ConfigEntry->PayloadLength); CFE_MSG_SetFcnCode(CFE_MSG_PTR(LocalStateEntry->CommandHeader), ConfigEntry->FcnCode); + LocalStateEntry->PacketRate = ConfigEntry->PacketRate; + LocalStateEntry->PayloadLength = ConfigEntry->PayloadLength; + + for (x =0; x < SCH_MAX_MSG_WORDS; x++) + { + LocalStateEntry->MessageBuffer[x]=ConfigEntry->MessageBuffer[x]; + } } ++ConfigEntry; ++LocalStateEntry; diff --git a/fsw/tables/sch_lab_table.c b/fsw/tables/sch_lab_table.c index c097396..75bac50 100644 --- a/fsw/tables/sch_lab_table.c +++ b/fsw/tables/sch_lab_table.c @@ -19,41 +19,24 @@ #include "cfe_tbl_filedef.h" /* Required to obtain the CFE_TBL_FILEDEF macro definition */ #include "sch_lab_table.h" #include "cfe_sb.h" /* Required to use the CFE_SB_MSGID_WRAP_VALUE macro */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include /* ** Include headers for message IDs here */ -#ifdef HAVE_CI_LAB #include "ci_lab_msgids.h" -#endif - -#ifdef HAVE_TO_LAB #include "to_lab_msgids.h" -#endif -#ifdef HAVE_SAMPLE_APP #include "sample_app_msgids.h" -#endif - -#ifdef HAVE_HS_APP -#include "hs_msgids.h" -#endif - -#ifdef HAVE_FM_APP -#include "fm_msgids.h" -#endif - -#ifdef HAVE_SC_APP -#include "sc_msgids.h" -#endif - -#ifdef HAVE_DS_APP -#include "ds_msgids.h" -#endif - -#ifdef HAVE_LC_APP -#include "lc_msgids.h" -#endif /* ** SCH Lab schedule table @@ -64,40 +47,41 @@ ** 3. If the table grows too big, increase SCH_LAB_MAX_SCHEDULE_ENTRIES */ -SCH_LAB_ScheduleTable_t SCH_TBL_Structure = { - .TickRate = 1, - .Config = { - {CFE_SB_MSGID_WRAP_VALUE(CFE_ES_SEND_HK_MID), 4, 0}, - {CFE_SB_MSGID_WRAP_VALUE(CFE_EVS_SEND_HK_MID), 4, 0}, - {CFE_SB_MSGID_WRAP_VALUE(CFE_TIME_SEND_HK_MID), 4, 0}, - {CFE_SB_MSGID_WRAP_VALUE(CFE_SB_SEND_HK_MID), 4, 0}, - {CFE_SB_MSGID_WRAP_VALUE(CFE_TBL_SEND_HK_MID), 4, 0}, -#ifdef HAVE_CI_LAB - {CFE_SB_MSGID_WRAP_VALUE(CI_LAB_SEND_HK_MID), 4, 0}, -#endif -#ifdef HAVE_TO_LAB - {CFE_SB_MSGID_WRAP_VALUE(TO_LAB_SEND_HK_MID), 4, 0}, -#endif -#ifdef HAVE_SAMPLE_APP - {CFE_SB_MSGID_WRAP_VALUE(SAMPLE_APP_SEND_HK_MID), 4, 0}, -#endif -#ifdef HAVE_SC_APP - {CFE_SB_MSGID_WRAP_VALUE(SC_SEND_HK_MID), 4, 0}, - {CFE_SB_MSGID_WRAP_VALUE(SC_1HZ_WAKEUP_MID), 1, 0}, /* Example of a 1hz packet */ -#endif -#ifdef HAVE_HS_APP - {CFE_SB_MSGID_WRAP_VALUE(HS_SEND_HK_MID), 0, 0}, /* Example of a message that wouldn't be sent */ -#endif -#ifdef HAVE_FM_APP - {CFE_SB_MSGID_WRAP_VALUE(FM_SEND_HK_MID), 4, 0}, -#endif -#ifdef HAVE_DS_APP - {CFE_SB_MSGID_WRAP_VALUE(DS_SEND_HK_MID), 4, 0}, -#endif -#ifdef HAVE_LC_APP - {CFE_SB_MSGID_WRAP_VALUE(LC_SEND_HK_MID), 4, 0}, -#endif - }}; +SCH_LAB_ScheduleTable_t SCH_TBL_Structure = {.TickRate = 100, + .Config = { + {CFE_SB_MSGID_WRAP_VALUE(CFE_ES_SEND_HK_MID), 100, 0}, /* Example of a 1hz packet */ + {CFE_SB_MSGID_WRAP_VALUE(CFE_TBL_SEND_HK_MID), 99, 0}, + {CFE_SB_MSGID_WRAP_VALUE(CFE_TIME_SEND_HK_MID), 98, 0}, + {CFE_SB_MSGID_WRAP_VALUE(CFE_SB_SEND_HK_MID), 97, 0}, + {CFE_SB_MSGID_WRAP_VALUE(CFE_EVS_SEND_HK_MID), 96, 0}, + {CFE_SB_MSGID_WRAP_VALUE(CI_LAB_SEND_HK_MID), 95, 0}, + {CFE_SB_MSGID_WRAP_VALUE(TO_LAB_SEND_HK_MID), 94, 0}, + {CFE_SB_MSGID_WRAP_VALUE(SAMPLE_APP_SEND_HK_MID), 93, 0}, + +/* Example of including additional open source apps */ +/* {CFE_SB_MSGID_WRAP_VALUE(SC_SEND_HK_MID), 92, 0}, + {CFE_SB_MSGID_WRAP_VALUE(SC_1HZ_WAKEUP_MID), 91, 0}, + {CFE_SB_MSGID_WRAP_VALUE(HS_SEND_HK_MID), 90, 0}, + {CFE_SB_MSGID_WRAP_VALUE(FM_SEND_HK_MID), 98, 0}, + {CFE_SB_MSGID_WRAP_VALUE(DS_SEND_HK_MID), 97, 0}, + {CFE_SB_MSGID_WRAP_VALUE(LC_SEND_HK_MID), 96, 0}, + {CFE_SB_MSGID_WRAP_VALUE(HS_WAKEUP_MID), 95, 0}, + {CFE_SB_MSGID_WRAP_VALUE(MD_WAKEUP_MID), 101, 0}, + {CFE_SB_MSGID_WRAP_VALUE(LC_SAMPLE_AP_MID), 500, 0, 8, { 0, 175, 1 }}, + {CFE_SB_MSGID_WRAP_VALUE(CF_WAKE_UP_MID), 102, 0}, + {CFE_SB_MSGID_WRAP_VALUE(CS_BACKGROUND_CYCLE_MID), 103, 0}, + {CFE_SB_MSGID_WRAP_VALUE(CS_BACKGROUND_CYCLE_MID), 104, 0}, + {CFE_SB_MSGID_WRAP_VALUE(CS_SEND_HK_MID), 106, 0}, + {CFE_SB_MSGID_WRAP_VALUE(HK_SEND_HK_MID), 107, 0}, + {CFE_SB_MSGID_WRAP_VALUE(MM_SEND_HK_MID), 108, 0}, + {CFE_SB_MSGID_WRAP_VALUE(CF_SEND_HK_MID), 109, 0}, + {CFE_SB_MSGID_WRAP_VALUE(MD_SEND_HK_MID), 110, 0}, +*/ + + /* {CFE_SB_MSGID_WRAP_VALUE(MD_SEND_HK_MID), 0, 0}, Example of a message that wouldn't be sent */ + + + }}; /* ** The macro below identifies: