Back to Fprime

Svc::RateGroupDriver Component

Svc/RateGroupDriver/docs/sdd.md

4.2.23.2 KB
Original Source

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:

RequirementDescriptionVerification Method
RGD-001The 'Svc::RateGroupDriver' component shall divide a primary system tick into the needed rate groupsUnit Test
RCD-002The 'Svc::RateGroupDriver' component shall be able to run in ISR contextInspection

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 TypeNameDirectionKindUsage
Svc::CycleCycleInInputSynchronousReceive the system tick
Svc::CycleCycleOutOutputn/aUsed 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 Ratedivider[0]SchedOut[0]divider[1]SchedOut[1]divider[2]SchedOut[2]
1Hz11Hz20.5Hz40.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

DateDescription
6/19/2015Design review edits
7/22/2015Design review actions
9/2/2015Unit test updates