• ASTP_1.0.0 2f511523cb

    gaisser released this 2021-04-27 14:21:31 +02:00 | 2004 commits to master since this release

    The Local Pool Update

    This release includes a major change to the design of the exchange of data between components. While the former Global DataPool was unclear of in data owernship, this was resolved by the new Local Pools. Components can now have an local pool which can be used to save the latest values.

    The Pools allow for interessting features:

    • Create periodic HK Messages
    • Sent update Messages to other components
    • Sent snapshot Messages of the current values to other components
    • A thread safe read access to the values for time critical components

    Examples are included in the new fsfw example project.

    In addition to the local pools, this update contains:

    API Changes:

    • ActionMessage::setCompletionReply now expects the success as dedicated bool
    Local Pools:
    • Introduction of Local Pools. **See documentation in the repo under fsfw/doc/README-localpools.md **
    • DHB has an additional PST Step. This has to be added to your Polling Sequence but gives more control over the DH (#281)
    • Typo for UNKNOWN_DEVICE_REPLY fixed (#320)
    • getTransitionDelayMs is now an abstract method (#320)
    • setNormalDatapoolEntriesInvalid is not an abstract method and a default implementation was provided
    • Changes in eventId generation (#288)
      • The spelling of the namespaces "EVENT" and "SEVERITY" changed to "event" and "severity"
      • The function to generate a EventId (makeEvent(..)) is more explicit now with the Id as new parameter. This should be preferred over the macro. Event.cpp source file removed, functions now
        defined in header directly. Namespaces renamed.

    File System Interface

    • A new interfaces specifies the functions for a software object which exposes the file system of
      a given hardware to use message based file handling (e.g. PUS commanding)

    Internal Error Reporter

    • The new internal error reporter uses the local data pools. The pool IDs for
      the exisiting three error values and the new error set will be hardcoded for
      now, the the constructor for the internal error reporter just takes an object
      ID for now.
    • MutexHelper is now MutexGuard (#383)
    • The API of the parameter service has been changed to prevent inconsistencies
      between documentation and actual code and to clarify usage.
    • The parameter ID now consists of:
      1. Domain ID (1 byte)
      2. Unique Identifier (1 byte)
      3. Linear Index (2 bytes)
        The linear index can be used for arrays as well as matrices.
        The parameter load command now explicitly expects the ECSS PTC and PFC
        information as well as the rows and column number. Rows and column will
        default to one, which is equivalent to one scalar parameter (the most
        important use-case)
    • The HasParameterIF has changed, ParameterId is now a uint8_t and the name is uniqueIdentifier (#365)
    Pool Managers
    • New way of initializing the Storage Pools:

    Old pool config:

    	    const uint8_t numberOfIpcPools = 4;
    	    uint16_t numberOfElements[numberOfIpcPools] = {100, 30, 20, 10};
    	    uint16_t sizeofElements[numberOfIpcPools] = {32, 64, 128, 265};
    	    new PoolManager<numberOfIpcPools>(objects::IPC_STORE,sizeofElements,

    New pool config:

    	const LocalPool::LocalPoolConfig poolConfig = {
    			{100, 32}, {30, 64}, {20, 128}, {10, 265}
    	new PoolManager(objects::IPC_STORE, poolConfig);
    	new PoolManager(objects::TM_STORE, poolConfig);
    	new PoolManager(objects::TC_STORE, poolConfig);
    Pus Sercices:
    • Service 5 and Service 1 queue depths need to be given as constructor elements (#283)
      • This allows mission code to select how many events/verification messages can be processed
    • All Commanding Service Base instances had a 3 command wide fifo, this can now be changed to any size by changing the new config value: (#319)
    	static constexpr uint8_t FSFW_CSB_FIFO_DEPTH = 6;
    • VerificationCodes namespace TC_VERIFY is now tc_verification (#309)

    Service Interface

    • Proper printf support contained in ServiceInterfacePrinter.h
    • CPP ostream support now optional (can reduce executable size by 150 - 250 kB)
    • Amalagated header which determines automatically which service interface to use depending on FSFWConfig.h configuration.
      Users can just use #include <fsfw/serviceinterface/ServiceInterface.h>
    • If CPP streams are excluded, sif:: calls won't work anymore and need to be replaced by their printf counterparts.
      For the fsfw, this can be done by checking the processor define FSFW_CPP_OSTREAM_ENABLED from FSFWConfig.h.
      For mission code, developers need to replace sif:: calls by the printf counterparts, but only if the CPP stream are excluded.
      If this is not the case, everything should work as usual.


    • Reworked Temperature Sensor for local pools (#402)


    • extern "C" void vRequestContextSwitchFromISR(); marked extern C so it can be implemented in a C file. (#263)
    • RTEMS OSAL Updated after tests (#363)
    • Real-time scheduler can be disabled to run without privileges (#406, Issue #404)
      ** FSFW_USE_REALTIME_FOR_LINUX needs to be defined with either 0 or 1. (1 is still the Default)
    • CCSDSTime.cpp now uses size_t for sizes (#315)
    • FSFWConfig: USE_MODESTORE for storage of on-the-fly modes is replaced with FSFW_USE_MODESTORE == 1 from FSFWConfig.h (#306)


    Pus Sercices:
    • Added Health Service (#282)
    • Added Hk service (#311)
    • Pus Service 20 (Parameter Service) added (#365)
    • FSFW Provides cmake files now (#298)
    • A developer can overwrite the expected reply length for a command with multiple replies (#416)
    • ExtendedController: Controller with HasActionIF has HasLocalDatapoolIF. (#276)
    • DeviceHandlerIF: Command_t NO_COMMAND_ID in DeviceHandlerIF can be used to set a invalid command (#263)
    • Default CFG: Update of Default CFG (#274)
    • PeriodicOperationDivider: Op divider additional features (#286)
    • unittest: Includes for unittest folder relative (#285)
    • objectmanager: objectmanager/frameworkObjects.h new ID added TIME_STAMPER = 0x53500010 (#328)

    Bug Fixes:


    • Bugfixes discovered during coverity checks (#398)


    • Host OSAL MessageQueue Hotfix (#297)
    • Host OSAL bugfixes (#289)
    • Clock::getDateAndTime conversion corrected (#344)
    • Important Bug fix in MesseQueue.cpp (#395)
    • Important Bug fix in MesseQueue.cpp (#394)

    See Milestone for all pull requests: