* Remove NATIVE_* types from FileUplink * Remove NATIVE_* types from RateGroupDriver * Remove NATIVE_* types from ComLogger * Addressing init function usage of NATIVE_ types * NATIVE_ types from command dispatcher * NATIVE_ types from ComQueue * NATIVE_ types from CmdSplitter * U32 -> FwOpcodeType in CmdDispatcher * NATIVE_ types in BufferManager * NATIVE_ types in LinuxTimer * NATIVE_ types from BufferAccumulator and renabling UT * NATIVE_ types from TlmChan * NATIVE_ types from BufferRepeater * NATIVE_ types from Active/Passive Rate Group * NATIVE_ types from ComSplitter and ComStub * NATIVE_ types from ActiveLogger and fixed ActiveRateGroup sdd * NATIVE_ types from Dp* * NATIVE_ types from FileManager and ActiveLogger (missed) * NATIVE_ types from BufferLogger, FileDownlink, StaticMemory * Deleting UdpSender/UdpReceiver that lack models and build config * NATIVE_ types from Health * NATIVE_ types from CmdSequencer * NATIVE_ types from TlmPacketizer * Fixing unit test issues * POINTER_CAST from Svc * CI fixes * CI fixes (Linux) * Fixing Ref/RPI for RG context * CI (sp) * Fixing RPI build for time conversions * CI fixes (RPI) * Self review comments * Removing UDP sender/receiver config * Review recommendations - pt 1
3.2 KiB
Svc::RateGroupDriver Component
1. Introduction
The RateGroupDriver Component is used to take a single system tick and distribute it to multiple rate groups in a system.
It takes the input Svc::Sched port, then divides down the tick rate based on arguments to the constructor.
Typically, the output ports would be connected to the asynchronous inputs of an ActiveRateGroup.
2. Requirements
The requirements for RateGroupDriver are as follows:
| Requirement | Description | Verification Method |
|---|---|---|
| RGD-001 | The 'Svc::RateGroupDriver' component shall divide a primary system tick into the needed rate groups | Unit Test |
| RCD-002 | The 'Svc::RateGroupDriver' component shall be able to run in ISR context | Inspection |
3. Design
3.1 Context
3.1.1 Component Diagram
The Svc::RateGroupDriver component has the following component diagram:
3.1.2 Ports
The Svc::RateGroupDriver component uses the following port types:
| Port Data Type | Name | Direction | Kind | Usage |
|---|---|---|---|---|
Svc::Cycle |
CycleIn | Input | Synchronous | Receive the system tick |
Svc::Cycle |
CycleOut | Output | n/a | Used to drive rate groups |
3.2 Functional Description
The Svc::RateGroupDriver component has one input port that receives a system tick.
The configure() function is passed a divider set specifies the divisors and offsets for each output port. This should be called after the constructor but before any port calls are made. The contents of the structure are copied during the call, so the array can be a temporary variable.
RateGroupDriverImpl::configure(const DividerSet& dividerSet);
The input rate for each output port will be divided down by the value in the divider field corresponding to the output port number.
The implementation will be ISR compliant by avoiding the following:
- Floating point calculations
- Taking mutexes
- Calling libraries with unknown side effects
- Long implementation
For instance,
SchedIn Rate |
divider[0] |
SchedOut[0] |
divider[1] |
SchedOut[1] |
divider[2] |
SchedOut[2] |
|---|---|---|---|---|---|---|
| 1Hz | 1 | 1Hz | 2 | 0.5Hz | 4 | 0.25Hz |
3.3 Scenarios
3.3.1 System Tick Port Call
As described in the Functional Description section, the RateGroupDriver component accepts calls to the SchedIn and divides them down to the SchedOut ports:
3.4 State
RateGroupDriver has no state machines.
3.5 Algorithms
RateGroupDriver has no significant algorithms.
4. Dictionary
No dictionary for this module
5. Module Checklists
| Checklist |
|---|
| Design |
| Code |
| Unit Test |
6. Unit Testing
To see unit test coverage run fprime-util check --coverage
7. Change Log
| Date | Description |
|---|---|
| 6/19/2015 | Design review edits |
| 7/22/2015 | Design review actions |
| 9/2/2015 | Unit test updates |

