From acc5fdeab9c92e4fe9cfd1f0c0bddc7d375b8cd9 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Wed, 30 Sep 2020 20:52:51 +0200 Subject: [PATCH] hosted build working --- Makefile-Hosted | 431 ++++++++++++++++++++ config/FSFWConfig.h | 8 + config/{tmtc => events}/subsystemIdRanges.h | 6 +- fsfw | 2 +- hosted/boardconfig/etl_profile.h | 38 ++ hosted/boardconfig/gcov.h | 14 + hosted/boardconfig/print.c | 14 + hosted/boardconfig/print.h | 8 + hosted/config/FSFWConfig.h | 9 + hosted/config/OBSWConfig.h | 14 + hosted/config/config.mk | 15 + hosted/config/events/subsystemIdRanges.h | 34 ++ hosted/config/ipc/MissionMessageTypes.cpp | 11 + hosted/config/ipc/MissionMessageTypes.h | 22 + hosted/config/version.h | 9 + hosted/hosted.mk | 7 + hosted/main.cpp | 31 ++ mission/core/ObjectFactory.cpp | 4 + test/testtasks/TestTask.cpp | 3 - 19 files changed, 673 insertions(+), 7 deletions(-) create mode 100644 Makefile-Hosted create mode 100644 config/FSFWConfig.h rename config/{tmtc => events}/subsystemIdRanges.h (81%) create mode 100644 hosted/boardconfig/etl_profile.h create mode 100644 hosted/boardconfig/gcov.h create mode 100644 hosted/boardconfig/print.c create mode 100644 hosted/boardconfig/print.h create mode 100644 hosted/config/FSFWConfig.h create mode 100644 hosted/config/OBSWConfig.h create mode 100644 hosted/config/config.mk create mode 100644 hosted/config/events/subsystemIdRanges.h create mode 100644 hosted/config/ipc/MissionMessageTypes.cpp create mode 100644 hosted/config/ipc/MissionMessageTypes.h create mode 100644 hosted/config/version.h create mode 100644 hosted/hosted.mk create mode 100644 hosted/main.cpp diff --git a/Makefile-Hosted b/Makefile-Hosted new file mode 100644 index 00000000..325eae90 --- /dev/null +++ b/Makefile-Hosted @@ -0,0 +1,431 @@ +#------------------------------------------------------------------------------- +# Makefile for SOURCE OBSW +#------------------------------------------------------------------------------- +# User-modifiable options +#------------------------------------------------------------------------------- +# Fundamentals on the build process of C/C++ Software: +# https://www3.ntu.edu.sg/home/ehchua/programming/cpp/gcc_make.html + +# Make documentation: https://www.gnu.org/software/make/manual/make.pdf +# Online: https://www.gnu.org/software/make/manual/make.html +# General rules: http://make.mad-scientist.net/papers/rules-of-makefiles/#rule3 +SHELL = /bin/sh + +CUSTOM_DEFINES := + +# Chip & board used for compilation +# (can be overriden by adding CHIP=chip and BOARD=board to the command-line) +BOARD_FILE_ROOT = hosted +BOARD = host +OS_FSFW = host +CUSTOM_DEFINES += -D$(OS_FSFW) + +# Copied from stackoverflow, can be used to differentiate between Windows +# and Linux +ifeq ($(OS),Windows_NT) + CUSTOM_DEFINES += -DWIN32 + ifeq ($(PROCESSOR_ARCHITEW6432),AMD64) + CUSTOM_DEFINES += -DAMD64 + else + ifeq ($(PROCESSOR_ARCHITECTURE),AMD64) + CUSTOM_DEFINES += -DAMD64 + endif + ifeq ($(PROCESSOR_ARCHITECTURE),x86) + CUSTOM_DEFINES += -DIA32 + endif + endif +else + UNAME_S := $(shell uname -s) + ifeq ($(UNAME_S),Linux) + DETECTED_OS = LINUX + CUSTOM_DEFINES += -DLINUX + endif + ifeq ($(UNAME_S),Darwin) + CUSTOM_DEFINES += -DOSX + endif + UNAME_P := $(shell uname -p) + ifeq ($(UNAME_P),x86_64) + CUSTOM_DEFINES += -DAMD64 + endif + ifneq ($(filter %86,$(UNAME_P)),) + CUSTOM_DEFINES += -DIA32 + endif + ifneq ($(filter arm%,$(UNAME_P)),) + CUSTOM_DEFINES += -DARM + endif +endif + +# General folder paths +FRAMEWORK_PATH = fsfw +MISSION_PATH = mission +CONFIG_PATH = $(BOARD_FILE_ROOT)/config +TEST_PATH = test +UNITTEST_PATH = unittest + +# Board specific paths +BSP_PATH = $(BOARD_FILE_ROOT) +BOARDTEST_PATH = $(BOARD_FILE_ROOT)/boardtest + +# Output file basename +BASENAME = sourceobsw +BINARY_NAME = $(BASENAME)-$(BOARD) +# Output files will be put in this directory inside +OUTPUT_FOLDER = $(OS_FSFW) + +# Default debug output +DEBUG_LEVEL = -g3 + +# Optimization level. -O0 default, -Os for size, -O3 for speed and size. +OPTIMIZATION = -O0 + +ifdef GCOV +CUSTOM_DEFINES += -DGCOV +endif + +# Output directories +BUILDPATH = _bin +DEPENDPATH = _dep +OBJECTPATH = _obj +ifeq ($(MAKECMDGOALS),release) +BUILD_FOLDER = mission +else +BUILD_FOLDER = devel +endif + +DEPENDDIR = $(DEPENDPATH)/$(OUTPUT_FOLDER)/$(BUILD_FOLDER) +OBJDIR = $(OBJECTPATH)/$(OUTPUT_FOLDER)/$(BUILD_FOLDER) +BINDIR = $(BUILDPATH)/$(OUTPUT_FOLDER)/$(BUILD_FOLDER) + +CLEANDEP = $(DEPENDPATH)/$(OUTPUT_FOLDER) +CLEANOBJ = $(OBJECTPATH)/$(OUTPUT_FOLDER) +CLEANBIN = $(BUILDPATH)/$(OUTPUT_FOLDER) + +#------------------------------------------------------------------------------- +# Tools and Includes +#------------------------------------------------------------------------------- + +# Tool suffix when cross-compiling +CROSS_COMPILE = + +# C Compiler +CC = $(CROSS_COMPILE)gcc + +# C++ compiler +CXX = $(CROSS_COMPILE)g++ + +# Additional Tools +SIZE = $(CROSS_COMPILE)size +STRIP = $(CROSS_COMPILE)strip +CP = $(CROSS_COMPILE)objcopy + +HEXCOPY = $(CP) -O ihex +BINCOPY = $(CP) -O binary +# files to be compiled, will be filled in by include makefiles +# := assignment here is neccessary as initialization so that the += +# operator can be used in the submakefiles to achieve immediate evaluation. +# See: http://make.mad-scientist.net/evaluation-and-expansion/ +CSRC := +CXXSRC := +ASRC := +INCLUDES := + +# Directories where $(directoryname).mk files should be included from +SUBDIRS := $(FRAMEWORK_PATH) $(TEST_PATH) $(BSP_PATH) \ + $(CONFIG_PATH) $(MISSION_PATH) +# $(MISSION_PATH) $(CONFIG_PATH) +# INCLUDES += framework/test/catch2 + +# ETL library include. +ETL_PATH = etl/include +I_INCLUDES += -I$(ETL_PATH) + +I_INCLUDES += $(addprefix -I, $(INCLUDES)) + +# This is a hack from http://make.mad-scientist.net/the-eval-function/ +# +# The problem is, that included makefiles should be aware of their relative path +# but not need to guess or hardcode it. So we set $(CURRENTPATH) for them. If +# we do this globally and the included makefiles want to include other makefiles as +# well, they would overwrite $(CURRENTPATH), screwing the include after them. +# +# By using a for-loop with an eval'd macro, we can generate the code to include all +# sub-makefiles (with the correct $(CURRENTPATH) set) before actually evaluating +# (and by this possibly changing $(CURRENTPATH)) them. +# +# This works recursively, if an included makefile wants to include, it can safely set +# $(SUBDIRS) (which has already been evaluated here) and do +# "$(foreach S,$(SUBDIRS),$(eval $(INCLUDE_FILE)))" +# $(SUBDIRS) must be relative to the project root, so to include subdir foo, set +# $(SUBDIRS) = $(CURRENTPATH)/foo. +define INCLUDE_FILE +CURRENTPATH := $S +include $(S)/$(notdir $S).mk +endef +$(foreach S,$(SUBDIRS),$(eval $(INCLUDE_FILE))) + + +#------------------------------------------------------------------------------- +# Source Files +#------------------------------------------------------------------------------- +# Additional source files which were not includes by other .mk +# files are added here. +# To help Makefile find source files, the source location paths +# can be added by using the VPATH variable +# See: https://www.gnu.org/software/make/manual/html_node/General-Search.html +# It is recommended to only use VPATH to add source locations +# See: http://make.mad-scientist.net/papers/how-not-to-use-vpath/ + +# Please ensure that no files are included by both .mk file and here ! + +# VPATH += mission/pus/ + +ifeq ($(DETECTED_OS), LINUX) +CXXSRC += $(FRAMEWORK_PATH)/osal/linux/TcUnixUdpPollingTask.cpp +CXXSRC += $(FRAMEWORK_PATH)/osal/linux/TmTcUnixUdpBridge.cpp +endif +# CXXSRC += Service17Test.cpp + +# All C Sources included by .mk files are assigned here +# Add the objects to sources so dependency handling works +C_OBJECTS += $(CSRC:.c=.o) + +# Objects built from Assembly source files +ASM_OBJECTS = $(ASRC:.S=.o) + +# Objects built from C++ source files +CXX_OBJECTS += $(CXXSRC:.cpp=.o) + +#------------------------------------------------------------------------------- +# Build Configuration + Output +#------------------------------------------------------------------------------- + +TARGET = Debug +DEBUG_MESSAGE = Off +OPTIMIZATION_MESSAGE = Off + +# Define Messages +MSG_INFO = Software: Hosted EIVE OBSW. +MSG_LINKING = Linking: +MSG_COMPILING = Compiling: +MSG_ASSEMBLING = Assembling: +MSG_BINARY = Generate binary: +MSG_OPTIMIZATION = Optimization: $(OPTIMIZATION), $(OPTIMIZATION_MESSAGE) +MSG_TARGET = Target Build: $(TARGET) +MSG_DEBUG = FSFW Debugging: $(DEBUG_MESSAGE) +MSG_COMIF = TMTC Communication Interface: $(COMIF_MESSAGE) + +# See: https://stackoverflow.com/questions/6687630/how-to-remove-unused-c-c-symbols-with-gcc-and-ld +# Used to throw away unused code. Reduces code size significantly ! +# -Wl,--gc-sections: needs to be passed to the linker to throw aways unused code +ifdef KEEP_UNUSED_CODE +PROTOTYPE_OPTIMIZATION = +DEAD_CODE_REMOVAL = +else +PROTOTYPE_OPTIMIZATION = -ffunction-sections -fdata-sections +DEAD_CODE_REMOVAL = -Wl,--gc-sections +# Link time optimization +# See https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html for reference +# Link time is larger and size of object files can not be retrieved +# but resulting binary is smaller. Could be used in mission/deployment build +# Requires -ffunction-section in linker call +LINK_TIME_OPTIMIZATION = -flto +OPTIMIZATION += $(PROTOTYPE_OPTIMIZATION) +endif + +# Dependency Flags +# These flags tell the compiler to build dependencies +# See: https://www.gnu.org/software/make/manual/html_node/Automatic-Prerequisites.html +# Using following guide: +# http://make.mad-scientist.net/papers/advanced-auto-dependency-generation/ +DEPFLAGS = -MT $@ -MMD -MP -MF $(DEPENDDIR)/$*.d + +# Flags for the compiler call +# - std: Which C++ version to use. Common versions: c++11, c++14 and c++17 +# - Wall: enable all warnings +# - Wextra: enable extra warnings +# - g: defines debug level +# - fmessage-length: to control the formatting algorithm for diagnostic messages; +# =0 means no line-wrapping, each error message appears on a single line +# - fno-exceptions: stops generating extra code needed to propagate exceptions, +# which can produce significant data size overhead +WARNING_FLAGS = -Wall -Wshadow=local -Wextra -Wimplicit-fallthrough=1 \ + -Wno-unused-parameter + +CXXDEFINES := $(CUSTOM_DEFINES) +CFLAGS += +CXXFLAGS += -I. $(DEBUG_LEVEL) $(WARNIING_FLAGS) $(I_INCLUDES) $(DEPFLAGS) \ + -fmessage-length=0 $(CXXDEFINES) $(OPTIMIZATION) +CPPFLAGS += -std=c++17 -fno-exceptions +ASFLAGS = -Wall -g $(OPTIMIZATION) $(I_INCLUDES) -D__ASSEMBLY__ + +# Flags for the linker call +# LINK_INCLUDES specify the path to used libraries and the linker script +# LINK_LIBRARIES link HCC and HAL library and enable float support +LDFLAGS := -g3 -pthread $(DEAD_CODE_REMOVAL) $(OPTIMIZATION) + +LINK_INCLUDES := + +LINK_LIBRARIES := +ifeq ($(OS),Windows_NT) +LINK_LIBRARIES += -lwsock32 -lws2_32 +endif + +# Gnu Coverage Tools Flags +ifdef GCOV +GCOV_CXXFLAGS = -fprofile-arcs -ftest-coverage +CXXFLAGS += $(GCOV_CXXFLAGS) +GCOV_LINKER_LIBS = -lgcov -fprofile-arcs -ftest-coverage +LINK_LIBRARIES += $(GCOV_LINKER_LIBS) +endif + +#------------------------------------------------------------------------------- +# Rules +#------------------------------------------------------------------------------- +# Makefile rules: https://www.gnu.org/software/make/manual/html_node/Rules.html +# This is the primary section which defines the ruleset to build +# the executable from the sources. + +default: all + +# Cleans all files +hardclean: + -rm -rf $(BUILDPATH) + -rm -rf $(OBJECTPATH) + -rm -rf $(DEPENDPATH) + +# Only clean files for current build +clean: + -rm -rf $(CLEANOBJ) + -rm -rf $(CLEANBIN) + -rm -rf $(CLEANDEP) + +# Only clean binaries. Useful for changing the binary type when object files are already compiled +# so complete rebuild is not necessary +cleanbin: + -rm -rf $(BUILDPATH)/$(OUTPUT_FOLDER) + +# In this section, the binaries are built for all selected memories + +all: executable + +# Build target configuration +release: OPTIMIZATION = -Os $(PROTOTYPE_OPTIMIZATION) $(LINK_TIME_OPTIMIZATION) +release: LINK_TIME_OPTIMIZATION = -flto +release: TARGET = Release +release: OPTIMIZATION_MESSAGE = On with Link Time Optimization +release: DEBUG_LEVEL = -g0 + +debug: CXXDEFINES += -DDEBUG +debug: DEBUG_MESSAGE = On + +ifndef KEEP_UNUSED_CODE +debug release: OPTIMIZATION_MESSAGE = Off with unused code removal +else +debug release: OPTIMIZATION_MESSAGE = Off +endif + +debug release: executable + +# executable: $(BINDIR)/$(BINARY_NAME).bin +ifeq ($(OS),Windows_NT) +executable: $(BINDIR)/$(BINARY_NAME).exe +else +executable: $(BINDIR)/$(BINARY_NAME).elf +endif + @echo + @echo $(MSG_INFO) + @echo $(MSG_TARGET) + @echo $(MSG_OPTIMIZATION) + @echo $(MSG_DEBUG) + +C_OBJECTS_PREFIXED = $(addprefix $(OBJDIR)/, $(C_OBJECTS)) +CXX_OBJECTS_PREFIXED = $(addprefix $(OBJDIR)/, $(CXX_OBJECTS)) +ASM_OBJECTS_PREFIXED = $(addprefix $(OBJDIR)/, $(ASM_OBJECTS)) +ALL_OBJECTS_PREFIXED = $(ASM_OBJECTS_PREFIXED) $(C_OBJECTS_PREFIXED) \ + $(CXX_OBJECTS_PREFIXED) + +# Useful for debugging the Makefile +# Also see: https://www.oreilly.com/openbook/make3/book/ch12.pdf +# $$(info $${CXXDEFINES} is [${CXXDEFINES}]) +# $$(info $${CXXSRC} is [${CXXSRC}]) + +# Automatic variables are used here extensively. Some of them +# are escaped($$) to suppress immediate evaluation. The most important ones are: +# $@: Name of Target (left side of rule) +# $<: Name of the first prerequisite (right side of rule) +# @^: List of all prerequisite, omitting duplicates +# @D: Directory and file-within-directory part of $@ + +# Generates binary and displays all build properties +# -p with mkdir ignores error and creates directory when needed. + +# SHOW_DETAILS = 1 + +ifeq ($(OS),Windows_NT) +$(BINDIR)/$(BINARY_NAME).exe: $(ALL_OBJECTS_PREFIXED) +else +$(BINDIR)/$(BINARY_NAME).elf: $(ALL_OBJECTS_PREFIXED) +endif + @echo + @echo $(MSG_LINKING) Target $@ + @mkdir -p $(@D) + @$(CXX) $(LDFLAGS) $(LINK_INCLUDES) -o $@ $^ $(LINK_LIBRARIES) +ifeq ($(BUILD_FOLDER), mission) +# With Link Time Optimization, section size is not available + $(SIZE) $@ +else + $(SIZE) $^ $@ +endif + +# Build new objects for changed dependencies. +$(OBJDIR)/%.o: %.cpp +$(OBJDIR)/%.o: %.cpp $(DEPENDDIR)/%.d | $(DEPENDDIR) + @echo + @echo $(MSG_COMPILING) $< + @mkdir -p $(@D) +ifdef SHOW_DETAILS + $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -o $@ $< +else + @$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -o $@ $< +endif + +$(OBJDIR)/%.o: %.c +$(OBJDIR)/%.o: %.c $(DEPENDDIR)/%.d | $(DEPENDDIR) + @echo + @echo $(MSG_COMPILING) $< + @mkdir -p $(@D) +ifdef SHOW_DETAILS + $(CC) $(CXXFLAGS) $(CFLAGS) -c -o $@ $< +else + @$(CC) $(CXXFLAGS) $(CFLAGS) -c -o $@ $< +endif + +$(OBJDIR)/%.o: %.S Makefile + @echo + @echo $(MSG_ASSEMBLING) $< + @mkdir -p $(@D) +ifdef SHOW_DETAILS + $(CC) $(ASFLAGS) -c -o $@ $< +else + @$(CC) $(ASFLAGS) -c -o $@ $< +endif + +#------------------------------------------------------------------------------- +# Dependency Handling +#------------------------------------------------------------------------------- + +# Dependency Handling according to following guide: +# http://make.mad-scientist.net/papers/advanced-auto-dependency-generation/ +$(DEPENDDIR): + @mkdir -p $(@D) +DEPENDENCY_RELATIVE = $(CSRC:.c=.d) $(CXXSRC:.cpp=.d) +# This is the list of all dependencies +DEPFILES = $(addprefix $(DEPENDDIR)/, $(DEPENDENCY_RELATIVE)) +# Create subdirectories for dependencies +$(DEPFILES): + @mkdir -p $(@D) +# Include all dependencies +include $(wildcard $(DEPFILES)) + +# .PHONY tells make that these targets aren't files +.PHONY: clean sdramCfg release debug all hardclean diff --git a/config/FSFWConfig.h b/config/FSFWConfig.h new file mode 100644 index 00000000..bc6cb52f --- /dev/null +++ b/config/FSFWConfig.h @@ -0,0 +1,8 @@ +#ifndef CONFIG_FSFWCONFIG_H_ +#define CONFIG_FSFWCONFIG_H_ + + + + + +#endif /* CONFIG_FSFWCONFIG_H_ */ diff --git a/config/tmtc/subsystemIdRanges.h b/config/events/subsystemIdRanges.h similarity index 81% rename from config/tmtc/subsystemIdRanges.h rename to config/events/subsystemIdRanges.h index 6b73d412..b1c18cbc 100644 --- a/config/tmtc/subsystemIdRanges.h +++ b/config/events/subsystemIdRanges.h @@ -1,5 +1,5 @@ -#ifndef CONFIG_TMTC_SUBSYSTEMIDRANGES_H_ -#define CONFIG_TMTC_SUBSYSTEMIDRANGES_H_ +#ifndef CONFIG_EVENTS_SUBSYSTEMIDRANGES_H_ +#define CONFIG_EVENTS_SUBSYSTEMIDRANGES_H_ #include #include @@ -31,4 +31,4 @@ enum: uint8_t { }; } -#endif /* CONFIG_TMTC_SUBSYSTEMIDRANGES_H_ */ +#endif /* CONFIG_EVENTS_SUBSYSTEMIDRANGES_H_ */ diff --git a/fsfw b/fsfw index 5340b9c5..8017c3c4 160000 --- a/fsfw +++ b/fsfw @@ -1 +1 @@ -Subproject commit 5340b9c58e78f2154fa8291c69bf887c252fe25f +Subproject commit 8017c3c4f0c273abe7032613645b59b6f5e3f1da diff --git a/hosted/boardconfig/etl_profile.h b/hosted/boardconfig/etl_profile.h new file mode 100644 index 00000000..c35ffb46 --- /dev/null +++ b/hosted/boardconfig/etl_profile.h @@ -0,0 +1,38 @@ +///\file + +/****************************************************************************** +The MIT License(MIT) + +Embedded Template Library. +https://github.com/ETLCPP/etl +https://www.etlcpp.com + +Copyright(c) 2019 jwellbelove + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files(the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and / or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions : + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +******************************************************************************/ +#ifndef __ETL_PROFILE_H__ +#define __ETL_PROFILE_H__ + +#define ETL_CHECK_PUSH_POP + +#define ETL_CPP11_SUPPORTED 1 +#define ETL_NO_NULLPTR_SUPPORT 0 + +#endif diff --git a/hosted/boardconfig/gcov.h b/hosted/boardconfig/gcov.h new file mode 100644 index 00000000..491d24c6 --- /dev/null +++ b/hosted/boardconfig/gcov.h @@ -0,0 +1,14 @@ +#ifndef LINUX_GCOV_H_ +#define LINUX_GCOV_H_ +#include + +#ifdef GCOV +extern "C" void __gcov_flush(); +#else +void __gcov_flush() { + sif::info << "GCC GCOV: Please supply GCOV=1 in Makefile if " + "coverage information is desired.\n" << std::flush; +} +#endif + +#endif /* LINUX_GCOV_H_ */ diff --git a/hosted/boardconfig/print.c b/hosted/boardconfig/print.c new file mode 100644 index 00000000..f409ee1b --- /dev/null +++ b/hosted/boardconfig/print.c @@ -0,0 +1,14 @@ +#include "print.h" +#include + +void printChar(const char* character, bool errStream) { + if(errStream) { + putc(*character, stderr); + return; + } + putc(*character, stdout); +} + + + + diff --git a/hosted/boardconfig/print.h b/hosted/boardconfig/print.h new file mode 100644 index 00000000..8e7e2e5d --- /dev/null +++ b/hosted/boardconfig/print.h @@ -0,0 +1,8 @@ +#ifndef HOSTED_BOARDCONFIG_PRINT_H_ +#define HOSTED_BOARDCONFIG_PRINT_H_ + +#include + +void printChar(const char* character, bool errStream); + +#endif /* HOSTED_BOARDCONFIG_PRINT_H_ */ diff --git a/hosted/config/FSFWConfig.h b/hosted/config/FSFWConfig.h new file mode 100644 index 00000000..df4075bd --- /dev/null +++ b/hosted/config/FSFWConfig.h @@ -0,0 +1,9 @@ +#ifndef CONFIG_FSFWCONFIG_H_ +#define CONFIG_FSFWCONFIG_H_ + +//! When using the newlib nano library, C99 support for stdio facilities +//! will not be provided. This define should be set to 1 if this is the case. +#define FSFW_NO_C99_IO 0 + + +#endif /* CONFIG_FSFWCONFIG_H_ */ diff --git a/hosted/config/OBSWConfig.h b/hosted/config/OBSWConfig.h new file mode 100644 index 00000000..9e11424b --- /dev/null +++ b/hosted/config/OBSWConfig.h @@ -0,0 +1,14 @@ +/** + * @brief This file can be used to add preprocessor define for conditional + * code inclusion exclusion or various other project constants and + * properties in one place. + */ +#ifndef CONFIG_OBSWCONFIG_H_ +#define CONFIG_OBSWCONFIG_H_ + +#define ADD_TEST_FOLDER 1 + +// Define not used yet, PUS stack and TMTC tasks are always started +#define ADD_PUS_STACK 1 + +#endif /* CONFIG_OBSWCONFIG_H_ */ diff --git a/hosted/config/config.mk b/hosted/config/config.mk new file mode 100644 index 00000000..105c3fba --- /dev/null +++ b/hosted/config/config.mk @@ -0,0 +1,15 @@ +CXXSRC += $(wildcard $(CURRENTPATH)/cdatapool/*.cpp) +CXXSRC += $(wildcard $(CURRENTPATH)/ipc/*.cpp) +CXXSRC += $(wildcard $(CURRENTPATH)/objects/*.cpp) +CXXSRC += $(wildcard $(CURRENTPATH)/pollingsequence/*.cpp) +CXXSRC += $(wildcard $(CURRENTPATH)/events/*.cpp) + +INCLUDES += $(CURRENTPATH) +INCLUDES += $(CURRENTPATH)/objects +INCLUDES += $(CURRENTPATH)/ipc +INCLUDES += $(CURRENTPATH)/pollingsequence +INCLUDES += $(CURRENTPATH)/returnvalues +INCLUDES += $(CURRENTPATH)/tmtc +INCLUDES += $(CURRENTPATH)/events +INCLUDES += $(CURRENTPATH)/devices +INCLUDES += $(CURRENTPATH)/cdatapool \ No newline at end of file diff --git a/hosted/config/events/subsystemIdRanges.h b/hosted/config/events/subsystemIdRanges.h new file mode 100644 index 00000000..b1c18cbc --- /dev/null +++ b/hosted/config/events/subsystemIdRanges.h @@ -0,0 +1,34 @@ +#ifndef CONFIG_EVENTS_SUBSYSTEMIDRANGES_H_ +#define CONFIG_EVENTS_SUBSYSTEMIDRANGES_H_ + +#include +#include + +/** + * These IDs are part of the ID for an event thrown by a subsystem. + * Numbers 0-80 are reserved for FSFW Subsystem IDs (framework/events/) + */ +namespace SUBSYSTEM_ID { +enum: uint8_t { + SUBSYSTE_ID_START = FW_SUBSYSTEM_ID_RANGE, + /** + * 80-105: PUS Services + */ + PUS_SERVICE_2 = 82, + PUS_SERVICE_3 = 83, + PUS_SERVICE_5 = 85, + PUS_SERVICE_6 = 86, + PUS_SERVICE_8 = 88, + PUS_SERVICE_23 = 91, + DUMMY_DEVICE = 90, + /** + * 105-115: AOCS + */ + GPS_DEVICE = 105, + + SPI_COM_IF = 128, + I2C_COM_IF = 138 +}; +} + +#endif /* CONFIG_EVENTS_SUBSYSTEMIDRANGES_H_ */ diff --git a/hosted/config/ipc/MissionMessageTypes.cpp b/hosted/config/ipc/MissionMessageTypes.cpp new file mode 100644 index 00000000..36ef1b73 --- /dev/null +++ b/hosted/config/ipc/MissionMessageTypes.cpp @@ -0,0 +1,11 @@ +#include "MissionMessageTypes.h" +#include + +void messagetypes::clearMissionMessage(CommandMessage* message) { + switch(message->getMessageType()) { + default: + break; + } +} + + diff --git a/hosted/config/ipc/MissionMessageTypes.h b/hosted/config/ipc/MissionMessageTypes.h new file mode 100644 index 00000000..832d8e58 --- /dev/null +++ b/hosted/config/ipc/MissionMessageTypes.h @@ -0,0 +1,22 @@ +#ifndef CONFIG_IPC_MISSIONMESSAGETYPES_H_ +#define CONFIG_IPC_MISSIONMESSAGETYPES_H_ + +#include + +class CommandMessage; + +/** + * Custom command messages are specified here. + * Most messages needed to use FSFW are already located in + * + * @param message Generic Command Message + */ +namespace messagetypes{ +enum MESSAGE_TYPE { + MISSION_MESSAGE_TYPE_START = FW_MESSAGES_COUNT, +}; + +void clearMissionMessage(CommandMessage* message); +} + +#endif /* CONFIG_IPC_MISSIONMESSAGETYPES_H_ */ diff --git a/hosted/config/version.h b/hosted/config/version.h new file mode 100644 index 00000000..386cbc09 --- /dev/null +++ b/hosted/config/version.h @@ -0,0 +1,9 @@ +#ifndef CONFIG_VERSION_H_ +#define CONFIG_VERSION_H_ + +#define SW_VERSION 0 +#define SW_SUBVERSION 1 + + + +#endif /* CONFIG_VERSION_H_ */ diff --git a/hosted/hosted.mk b/hosted/hosted.mk new file mode 100644 index 00000000..77b348df --- /dev/null +++ b/hosted/hosted.mk @@ -0,0 +1,7 @@ +# add main and others +CXXSRC += $(wildcard $(CURRENTPATH)/*.cpp) +CSRC += $(wildcard $(CURRENTPATH)/*.c) + +CSRC += $(wildcard $(CURRENTPATH)/boardconfig/*.c) + +INCLUDES += $(CURRENTPATH)/boardconfig \ No newline at end of file diff --git a/hosted/main.cpp b/hosted/main.cpp new file mode 100644 index 00000000..4d18397b --- /dev/null +++ b/hosted/main.cpp @@ -0,0 +1,31 @@ +#include +#include + +#include +#include +#include + + + +/** + * @brief This is the main program for the hosted build. It can be run for + * Linux and Windows. + * @return + */ +int main(void) +{ + std::cout << "-- EIVE OBSW --" << std::endl; + std::cout << "-- Compiled for Linux " << " --" << std::endl; + std::cout << "-- Software version v" << SW_VERSION << "." << SW_SUBVERSION + << " -- " << std::endl; + std::cout << "-- " << __DATE__ << " " << __TIME__ << " --" << std::endl; + + InitMission::initMission(); + + for(;;) { + // suspend main thread by sleeping it. + TaskFactory::delayTask(5000); + } +} + + diff --git a/mission/core/ObjectFactory.cpp b/mission/core/ObjectFactory.cpp index 66ff33a9..6ebafbd2 100644 --- a/mission/core/ObjectFactory.cpp +++ b/mission/core/ObjectFactory.cpp @@ -22,8 +22,10 @@ #include #include #include +#ifdef LINUX #include #include +#endif #include @@ -92,10 +94,12 @@ void ObjectFactory::produce(){ /* TMTC Reception via UDP socket */ new TmFunnel(objects::TM_FUNNEL); +#ifdef LINUX new TmTcUnixUdpBridge(objects::UDP_BRIDGE, objects::CCSDS_PACKET_DISTRIBUTOR, objects::TM_STORE, objects::TC_STORE); new TcUnixUdpPollingTask(objects::UDP_POLLING_TASK, objects::UDP_BRIDGE); +#endif /* PUS stack */ diff --git a/test/testtasks/TestTask.cpp b/test/testtasks/TestTask.cpp index a618454c..d81f82bc 100644 --- a/test/testtasks/TestTask.cpp +++ b/test/testtasks/TestTask.cpp @@ -1,6 +1,3 @@ -#include "logicalAddresses.h" -#include "apid.h" - #include #include