Skip to content

Commit

Permalink
Fix #150, implement header file convention for SCH_LAB
Browse files Browse the repository at this point in the history
Move configurable header files into a separate directory with names
according to the pattern documented in CFE.
  • Loading branch information
jphickey committed Oct 6, 2023
1 parent 82645f5 commit 75a94c8
Show file tree
Hide file tree
Showing 11 changed files with 249 additions and 43 deletions.
5 changes: 0 additions & 5 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,3 @@ endforeach()
# Create the app module
add_cfe_app(sch_lab fsw/src/sch_lab_app.c)
add_cfe_tables(sch_lab fsw/tables/sch_lab_table.c)

target_include_directories(sch_lab PUBLIC
fsw/mission_inc
fsw/platform_inc
)
24 changes: 24 additions & 0 deletions arch_build.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
###########################################################
#
# SCH_LAB platform build setup
#
# This file is evaluated as part of the "prepare" stage
# and can be used to set up prerequisites for the build,
# such as generating header files
#
###########################################################

# The list of header files that control the SCH_LAB configuration
set(SCH_LAB_PLATFORM_CONFIG_FILE_LIST
sch_lab_perfids.h
)

# Create wrappers around the all the config header files
# This makes them individually overridable by the missions, without modifying
# the distribution default copies
foreach(SCH_LAB_CFGFILE ${SCH_LAB_PLATFORM_CONFIG_FILE_LIST})
generate_config_includefile(
FILE_NAME "${SCH_LAB_CFGFILE}"
FALLBACK_FILE "${CMAKE_CURRENT_LIST_DIR}/config/default_${SCH_LAB_CFGFILE}"
)
endforeach()
47 changes: 47 additions & 0 deletions config/default_sch_lab_interface_cfg.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
/************************************************************************
* NASA Docket No. GSC-18,719-1, and identified as “core Flight System: Bootes”
*
* Copyright (c) 2020 United States Government as represented by the
* Administrator of the National Aeronautics and Space Administration.
* All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may obtain
* a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
************************************************************************/

/**
* @file
*
* CFS SCH_LAB Application Mission Configuration Header File
*
* This is a compatibility header for the "mission_cfg.h" file that has
* traditionally provided public config definitions for each CFS app.
*
* @note This file may be overridden/superceded by mission-provided defintions
* either by overriding this header or by generating definitions from a command/data
* dictionary tool.
*/
#ifndef SCH_LAB_INTERFACE_CFG_H
#define SCH_LAB_INTERFACE_CFG_H


/**
* @brief The maximum number of schedule table entries
*/
#define SCH_LAB_MAX_SCHEDULE_ENTRIES 32

/**
* @brief The maximum number of arguments to each schedule message entry
*
* This is allocated in units of 16 bit words.
*/
#define SCH_LAB_MAX_ARGS_PER_ENTRY 32

#endif /* SCH_LAB_INTERFACE_CFG_H */
36 changes: 36 additions & 0 deletions config/default_sch_lab_mission_cfg.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
/************************************************************************
* NASA Docket No. GSC-18,719-1, and identified as “core Flight System: Bootes”
*
* Copyright (c) 2020 United States Government as represented by the
* Administrator of the National Aeronautics and Space Administration.
* All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may obtain
* a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
************************************************************************/

/**
* @file
*
* CFS SCH_LAB Application Mission Configuration Header File
*
* This is a compatibility header for the "mission_cfg.h" file that has
* traditionally provided public config definitions for each CFS app.
*
* @note This file may be overridden/superceded by mission-provided defintions
* either by overriding this header or by generating definitions from a command/data
* dictionary tool.
*/
#ifndef SCH_LAB_MISSION_CFG_H
#define SCH_LAB_MISSION_CFG_H

#include "sch_lab_interface_cfg.h"

#endif /* SCH_LAB_MISSION_CFG_H */
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@
/**
* @file
* Define SCH Lab Performance IDs
*
* These ID values need to be unique across a CFS deployment, so they may be customized
* as needed to avoid collision with other apps.
*/
#ifndef SCH_LAB_PERFIDS_H
#define SCH_LAB_PERFIDS_H
Expand Down
33 changes: 33 additions & 0 deletions config/default_sch_lab_tbl.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/************************************************************************
* NASA Docket No. GSC-18,719-1, and identified as “core Flight System: Bootes”
*
* Copyright (c) 2020 United States Government as represented by the
* Administrator of the National Aeronautics and Space Administration.
* All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may obtain
* a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
************************************************************************/

/**
* @file
* Specification for the SCH_LAB table structures
*
* @note
* Constants and enumerated types related to these table structures
* are defined in sch_lab_tbldefs.h.
*/
#ifndef SCH_LAB_TBL_H
#define SCH_LAB_TBL_H

#include "sch_lab_tbldefs.h"
#include "sch_lab_tblstruct.h"

#endif
Original file line number Diff line number Diff line change
Expand Up @@ -18,30 +18,29 @@

/**
* @file
* This file contains the schedule tables for the SCH Lab app.
* It is intended to go in the platform include directory so the SCH_LAB
* app source code does not have to be modified.
* Specification for the CFS SCH_LAB table related data structures and
* constant definitions.
*
* The structure definitions in this file are closely related to the implementation
* of the application. Any modification to these structures will likely need
* a correpsonding update to the source code.
*/
#ifndef SCH_LAB_TABLE_H
#define SCH_LAB_TABLE_H
#ifndef SCH_LAB_TBLDEFS_H
#define SCH_LAB_TBLDEFS_H

#include "cfe_sb_extern_typedefs.h" /* for CFE_SB_MsgId_t */
#include "cfe_msg_api_typedefs.h" /* For CFE_MSG_FcnCode_t */
#include "cfe_msgids.h"

#include "sch_lab_interface_cfg.h"

/*
** Defines
*/
#define SCH_LAB_END_OF_TABLE 0
#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
#ifdef SOFTWARE_BIG_BIT_ORDER
#define SCH_PACK_32BIT(value) \
(uint16)((value & 0xFFFF0000) >> 16), (uint16)(value & 0x0000FFFF)
#else
(uint16)((value & 0xFFFF0000) >> 16), (uint16)(value & 0x0000FFFF)
#else
#define SCH_PACK_32BIT(value) \
(uint16)(value & 0x0000FFFF), (uint16)((value & 0xFFFF0000) >> 16)
#endif
Expand All @@ -55,7 +54,7 @@ typedef struct
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 */
uint16 MessageBuffer[SCH_LAB_MAX_ARGS_PER_ENTRY]; /* Command args in 16 bit words */
} SCH_LAB_ScheduleTableEntry_t;

typedef struct
Expand Down
41 changes: 41 additions & 0 deletions config/default_sch_lab_tblstruct.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/************************************************************************
* NASA Docket No. GSC-18,719-1, and identified as “core Flight System: Bootes”
*
* Copyright (c) 2020 United States Government as represented by the
* Administrator of the National Aeronautics and Space Administration.
* All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may obtain
* a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
************************************************************************/

/**
* @file
* Specification for the CFS SCH_LAB table encapsulation structures
*
* Provides default definitions for SCH_LAB table structures
*
* @note This file may be overridden/superceded by mission-provided defintions
* either by overriding this header or by generating definitions from a command/data
* dictionary tool.
*/
#ifndef SCH_LAB_TBLSTRUCT_H
#define SCH_LAB_TBLSTRUCT_H

#include "sch_lab_tbldefs.h"


/*
* There is no extra encapsulation here, this header only
* defines the default file name to use for the SCH table
*/
#define SCH_TBL_DEFAULT_FILE "/cf/sch_lab_table.tbl"

#endif
16 changes: 5 additions & 11 deletions fsw/src/sch_lab_app.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,26 +27,20 @@
#include <string.h>

#include "cfe.h"
#include "cfe_sb.h"
#include "osapi.h"
#include "cfe_es.h"
#include "cfe_error.h"
#include "cfe_msgids.h"

#include "sch_lab_perfids.h"
#include "sch_lab_version.h"

/*
** SCH Lab Schedule table from the platform inc directory
*/
#include "sch_lab_table.h"
#include "sch_lab_mission_cfg.h"
#include "sch_lab_tbl.h"

/*
** Global Structure
*/
typedef struct
{
CFE_MSG_CommandHeader_t CommandHeader;
uint16 MessageBuffer[SCH_MAX_MSG_WORDS];
uint16 MessageBuffer[SCH_LAB_MAX_ARGS_PER_ENTRY];
uint16 PayloadLength;
uint32 PacketRate;
uint32 Counter;
Expand Down Expand Up @@ -251,7 +245,7 @@ int32 SCH_LAB_AppInit(void)
LocalStateEntry->PacketRate = ConfigEntry->PacketRate;
LocalStateEntry->PayloadLength = ConfigEntry->PayloadLength;

for (x =0; x < SCH_MAX_MSG_WORDS; x++)
for (x =0; x < SCH_LAB_MAX_ARGS_PER_ENTRY; x++)
{
LocalStateEntry->MessageBuffer[x]=ConfigEntry->MessageBuffer[x];
}
Expand Down
15 changes: 3 additions & 12 deletions fsw/tables/sch_lab_table.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
************************************************************************/

#include "cfe_tbl_filedef.h" /* Required to obtain the CFE_TBL_FILEDEF macro definition */
#include "sch_lab_table.h"
#include "sch_lab_tbl.h"
#include "cfe_sb.h" /* Required to use the CFE_SB_MSGID_WRAP_VALUE macro */

#ifdef HAVE_CI_LAB
Expand Down Expand Up @@ -52,15 +52,6 @@
#include "lc_msgids.h"
#endif


/*
** Include headers for message IDs here
*/
#include "ci_lab_msgids.h"
#include "to_lab_msgids.h"

#include "sample_app_msgids.h"

/*
** SCH Lab schedule table
** When populating this table:
Expand All @@ -70,7 +61,7 @@
** 3. If the table grows too big, increase SCH_LAB_MAX_SCHEDULE_ENTRIES
*/

SCH_LAB_ScheduleTable_t SCH_TBL_Structure = {.TickRate = 100,
SCH_LAB_ScheduleTable_t SCH_LAB_ScheduleTable = {.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), 50, 0},
Expand Down Expand Up @@ -115,4 +106,4 @@ SCH_LAB_ScheduleTable_t SCH_TBL_Structure = {.TickRate = 100,
** 3) a brief description of the contents of the file image
** 4) the desired name of the table image binary file that is cFE compatible
*/
CFE_TBL_FILEDEF(SCH_TBL_Structure, SCH_LAB_APP.SCH_LAB_SchTbl, Schedule Lab MsgID Table, sch_lab_table.tbl)
CFE_TBL_FILEDEF(SCH_LAB_ScheduleTable, SCH_LAB_APP.ScheduleTable, Schedule Lab MsgID Table, sch_lab_table.tbl)
43 changes: 43 additions & 0 deletions mission_build.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
###########################################################
#
# SCH_LAB mission build setup
#
# This file is evaluated as part of the "prepare" stage
# and can be used to set up prerequisites for the build,
# such as generating header files
#
###########################################################

# The list of header files that control the SCH_LAB configuration
set(SCH_LAB_MISSION_CONFIG_FILE_LIST
sch_lab_interface_cfg.h
sch_lab_mission_cfg.h
sch_lab_perfids.h
sch_lab_tbldefs.h
sch_lab_tbl.h
sch_lab_tblstruct.h
)

if (CFE_EDS_ENABLED_BUILD)

# In an EDS-based build, these files come generated from the EDS tool
set(SCH_LAB_CFGFILE_SRC_sch_lab_interface_cfg "sch_lab_eds_designparameters.h")
set(SCH_LAB_CFGFILE_SRC_sch_lab_tbldefs "sch_lab_eds_typedefs.h")

endif(CFE_EDS_ENABLED_BUILD)

# Create wrappers around the all the config header files
# This makes them individually overridable by the missions, without modifying
# the distribution default copies
foreach(SCH_LAB_CFGFILE ${SCH_LAB_MISSION_CONFIG_FILE_LIST})
get_filename_component(CFGKEY "${SCH_LAB_CFGFILE}" NAME_WE)
if (DEFINED SCH_LAB_CFGFILE_SRC_${CFGKEY})
set(DEFAULT_SOURCE GENERATED_FILE "${SCH_LAB_CFGFILE_SRC_${CFGKEY}}")
else()
set(DEFAULT_SOURCE FALLBACK_FILE "${CMAKE_CURRENT_LIST_DIR}/config/default_${SCH_LAB_CFGFILE}")
endif()
generate_config_includefile(
FILE_NAME "${SCH_LAB_CFGFILE}"
${DEFAULT_SOURCE}
)
endforeach()

0 comments on commit 75a94c8

Please sign in to comment.