Autosar RTE Layer
Autosar RTE Layer
                                         updated VFB-Tracing
                       AUTOSAR           unconnected R-Ports are supported
 2009-02-04   3.1.2                      incompatible function declarations
                       Administration
                                          fixed
                                         RTE server mapping updated
                       AUTOSAR
 2008-02-01   3.0.2                      Layout adaptations
                       Administration
                                         Adapted to new version of meta
                                          model
                                         "RTE ECU Configuration" added
                       AUTOSAR           Calibration and measurement
 2007-12-21   3.0.1
                       Administration     revised
                                         Document meta information
                                          extended
                                         Small layout adaptations made
                       AUTOSAR           "Advice for users" revised
 2007-01-24   2.1.15
                       Administration    "Revision Information" added
                                         Adapted to new version of meta
                                          model
                                         New feature debouncing of runnable
                                          activation
                       AUTOSAR           New feature runnable activation
 2006-11-28   2.1                         offset
                       Administration
                                         Measurement and Calibration
                                          added
                                         Semantics of implicit communication
                                          enhanced
                                         Legal disclaimer revised
                       AUTOSAR
 2006-05-16   2.0                       Initial release
                       Administration
Disclaimer
This specification and the material contained in it, as released by AUTOSAR, is for the
purpose of information only. AUTOSAR and the companies that have contributed to it
shall not be liable for any use of the specification.
The material contained in this specification is protected by copyright and other types of
Intellectual Property Rights. The commercial exploitation of the material contained in
this specification requires a license to such Intellectual Property Rights.
This specification may be utilized or reproduced without any modification, in any form
or by any means, for informational purposes only. For any other purpose, no part of
the specification may be utilized or reproduced, in any form or by any means, without
permission in writing from the publisher.
The AUTOSAR specifications have been developed for automotive applications only.
They have neither been developed, nor tested for non-automotive applications.
The word AUTOSAR and the AUTOSAR logo are registered trademarks.
Table of Contents
1 Introduction                                                                                                         23
   1.1       Scope . . . . . . . . . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   23
   1.2       Dependency to other AUTOSAR specifications            .   .   .   .   .   .   .   .   .   .   .   .   .   24
   1.3       Acronyms and Abbreviations . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   25
   1.4       Technical Terms . . . . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   25
   1.5       Document Conventions . . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   31
   1.6       Requirements Tracing . . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   32
2 RTE Overview                                                                                                         63
   2.1  The RTE in the Context of AUTOSAR . . . . .            .   .   .   .   .   .   .   .   .   .   .   .   .   .   63
   2.2  AUTOSAR Concepts . . . . . . . . . . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   63
       2.2.1       AUTOSAR Software-components .               .   .   .   .   .   .   .   .   .   .   .   .   .   .   63
       2.2.2       Basic Software Modules . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   64
       2.2.3       Communication . . . . . . . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   65
             2.2.3.1      Communication Paradigms              .   .   .   .   .   .   .   .   .   .   .   .   .   .   65
             2.2.3.2      Communication Modes . . .            .   .   .   .   .   .   .   .   .   .   .   .   .   .   65
             2.2.3.3      Static Communication . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   66
             2.2.3.4      Multiplicity . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   66
       2.2.4       Concurrency . . . . . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   67
   2.3  The RTE Generator . . . . . . . . . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   67
   2.4  Design Decisions . . . . . . . . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   68
3 RTE Generation Process                                                                                               69
   3.1       Contract Phase . . . . . . . . . . . . . . . . . . . . . . .              .   .   .   .   .   .   .   .   74
            3.1.1       RTE Contract Phase . . . . . . . . . . . . . . .               .   .   .   .   .   .   .   .   74
            3.1.2       Basic Software Scheduler Contract Phase . .                    .   .   .   .   .   .   .   .   75
   3.2       PreBuild Data Set Contract Phase . . . . . . . . . . . .                  .   .   .   .   .   .   .   .   76
   3.3       Edit ECU Configuration of the RTE . . . . . . . . . . . .                 .   .   .   .   .   .   .   .   76
   3.4       Generation Phase . . . . . . . . . . . . . . . . . . . . .                .   .   .   .   .   .   .   .   77
            3.4.1       Basic Software Scheduler Generation Phase .                    .   .   .   .   .   .   .   .   77
            3.4.2       RTE Generation Phase . . . . . . . . . . . . .                 .   .   .   .   .   .   .   .   78
            3.4.3       Basic Software Module Description generation                   .   .   .   .   .   .   .   .   79
                  3.4.3.1      Bsw Module Description . . . . . . . .                  .   .   .   .   .   .   .   .   80
                  3.4.3.2      Bsw Internal Behavior . . . . . . . . .                 .   .   .   .   .   .   .   .   81
                  3.4.3.3      Bsw Implementation . . . . . . . . . .                  .   .   .   .   .   .   .   .   82
   3.5       PreBuild Data Set Generation Phase . . . . . . . . . . .                  .   .   .   .   .   .   .   .   83
   3.6       PostBuild Data Set Generation Phase . . . . . . . . . .                   .   .   .   .   .   .   .   .   83
   3.7       RTE Configuration interaction with other BSW Modules .                    .   .   .   .   .   .   .   .   84
4 RTE Functional Specification                                                                                         86
   4.1       Architectural concepts . . . . . . . . . . . . . . . . .          .   .   .   .   .   .   .   .   .   .   86
            4.1.1      Scope . . . . . . . . . . . . . . . . . . . . .         .   .   .   .   .   .   .   .   .   .   86
            4.1.2      RTE and Data Types . . . . . . . . . . . . .            .   .   .   .   .   .   .   .   .   .   87
            4.1.3      RTE and AUTOSAR Software-Components                     .   .   .   .   .   .   .   .   .   .   88
Bibliography
 [1] Virtual Functional Bus
     AUTOSAR_EXP_VFB
 [2] Software Component Template
     AUTOSAR_TPS_SoftwareComponentTemplate
 [3] Specification of Communication
     AUTOSAR_SWS_COM
 [4] Specification of Operating System
     AUTOSAR_SWS_OS
 [5] Specification of ECU Configuration
     AUTOSAR_TPS_ECUConfiguration
 [6] Methodology
     AUTOSAR_TR_Methodology
 [7] Specification of ECU State Manager
     AUTOSAR_SWS_ECUStateManager
 [8] System Template
     AUTOSAR_TPS_SystemTemplate
 [9] Basic Software Module Description Template
     AUTOSAR_TPS_BSWModuleDescriptionTemplate
[10] Generic Structure Template
     AUTOSAR_TPS_GenericStructureTemplate
[11] Glossary
     AUTOSAR_TR_Glossary
[12] General Requirements on Basic Software Modules
     AUTOSAR_SRS_BSWGeneral
[13] Requirements on Runtime Environment
     AUTOSAR_SRS_RTE
[14] Specification of Timing Extensions
     AUTOSAR_TPS_TimingExtensions
[15] Layered Software Architecture
     AUTOSAR_EXP_LayeredSoftwareArchitecture
[16] Specification of ECU Resource Template
     AUTOSAR_TPS_ECUResourceTemplate
[17] Specification of I/O Hardware Abstraction
     AUTOSAR_SWS_IOHardwareAbstraction
1     Introduction
This document contains the software specification of the AUTOSAR Run-Time Environ-
ment (RTE) and the Basic Software Scheduler. Basically, the RTE together with the
OS, AUTOSAR COM and other Basic Software Modules is the implementation of the
Virtual Functional Bus concepts (VFB, [1]). The RTE implements the AUTOSAR Virtual
Functional Bus interfaces and thereby realizes the communication between AUTOSAR
software-components.
This document describes how these concepts are realized within the RTE. Further-
more, the Application Programming Interface (API) of the RTE and the interaction of
the RTE with other basic software modules is specified.
The Basic Software Scheduler offers concepts and services to integrate Basic Soft-
ware Modules Hence, the Basic Software Scheduler
     embed Basic Software Module implementations into the AUTOSAR OS context
     trigger main processing functions of the Basic Software Modules
     apply data consistency mechanisms for the Basic Software Modules
     to communicate modes between Basic Software Modules
1.1    Scope
This document is intended to be the main reference for developers of an RTE gener-
ator tool or of a concrete RTE implementation respectively. The document is also the
reference for developers of AUTOSAR software-components and basic software mod-
ules that interact with the RTE, since it specifies the application programming interface
of the RTE and therefore the mechanisms for accessing the RTE functionality. Fur-
thermore, this specification should be read by the AUTOSAR working groups that are
closely related to the RTE (see Section 1.2 below), since it describes the interfaces of
the RTE to these modules as well as the behavior / functionality the RTE expects from
them.
This document is structured as follows. After this general introduction, Chapter 2 gives
a more detailed introduction of the concepts of the RTE. Chapter 3 describes how an
RTE is generated in the context of the overall AUTOSAR methodology. Chapter 4 is
the central part of this document. It specifies the RTE functionality in detail. The RTE
API is described in Chapter 5.
The appendix of this document consists of five parts: Appendix A lists the restrictions to
the AUTOSAR metamodel that this version of the RTE specification relies on. Appendix
B explicitly lists all external requirements, i.e. all requirements that are not about the
RTE itself but specify the assumptions on the environment and the input of an RTE
generator. In Appendix C some MISRA-C rules are listed that are likely to be violated
by RTE code, and the rationale why these violations may occur.
Note that Chapters 1 and 2, as well as Appendix C do not contain any requirements
and are thus intended for information only.
Chapters 4 and 5 are probably of most interest for developers of an RTE Generator.
Chapters 2, 3, 5 are important for developers of AUTOSAR software-components and
basic software modules. The most important chapters for related AUTOSAR work
packages would be Chapters 4, 5, as well as Appendix B.
The specifications in this document do not define details of the implementation of a
concrete RTE or RTE generator respectively. Furthermore, aspects of the ECU- and
system-generation process (like e.g. the mapping of SW-Cs to ECUs, or schedulability
analysis) are also not in the scope of this specification. Nevertheless, it is specified
what input the RTE generator expects from these configuration phases.
  1
      declaration with no static or external specifier defines an automatic variable
                                                       [SWS_Rte_05509] [SWS_Rte_06207]
                                                       [SWS_Rte_07367] [SWS_Rte_07390]
                                                       [SWS_Rte_07394] [SWS_Rte_07556]
 [SRS_BSW_00312]   Shared code shall be reentrant      [SWS_Rte_01012]
 [SRS_BSW_00327]   Error values naming convention      [SWS_Rte_01058] [SWS_Rte_01060]
                                                       [SWS_Rte_01061] [SWS_Rte_01064]
                                                       [SWS_Rte_01065] [SWS_Rte_01317]
                                                       [SWS_Rte_02571] [SWS_Rte_02594]
                                                       [SWS_Rte_02702] [SWS_Rte_02739]
                                                       [SWS_Rte_02747] [SWS_Rte_02757]
                                                       [SWS_Rte_07054] [SWS_Rte_07289]
                                                       [SWS_Rte_07290] [SWS_Rte_07384]
                                                       [SWS_Rte_07562] [SWS_Rte_07563]
                                                       [SWS_Rte_07655] [SWS_Rte_08065]
                                                       [SWS_Rte_08551] [SWS_Rte_08725]
                                                       [SWS_Rte_08726]
 [SRS_BSW_00330]   It shall be allowed to use macros   [SWS_Rte_01274]
                   instead of functions where
                   source code is used and runtime
                   is critical
 [SRS_BSW_00336]   Basic SW module shall be able       [SWS_Rte_07274] [SWS_Rte_07275]
                   to shutdown                         [SWS_Rte_07277]
 [SRS_BSW_00337]   Classification of development       [SWS_Rte_06631] [SWS_Rte_06632]
                   errors                              [SWS_Rte_06633] [SWS_Rte_06634]
                                                       [SWS_Rte_06635] [SWS_Rte_06637]
                                                       [SWS_Rte_07675] [SWS_Rte_07676]
                                                       [SWS_Rte_07682] [SWS_Rte_07683]
                                                       [SWS_Rte_07684] [SWS_Rte_07685]
 [SRS_BSW_00342]   It shall be possible to create an   [SWS_Rte_07511]
                   AUTOSAR ECU out of modules
                   provided as source code and
                   modules provided as object
                   code, even mixed
 [SRS_BSW_00346]   All AUTOSAR Basic Software          [SWS_Rte_06638]
                   Modules shall provide at least a
                   basic set of module files
 [SRS_BSW_00347]   A Naming seperation of different    [SWS_Rte_06203] [SWS_Rte_06532]
                   instances of BSW drivers shall      [SWS_Rte_06535] [SWS_Rte_06536]
                   be in place                         [SWS_Rte_07093] [SWS_Rte_07250]
                                                       [SWS_Rte_07253] [SWS_Rte_07255]
                                                       [SWS_Rte_07260] [SWS_Rte_07263]
                                                       [SWS_Rte_07266] [SWS_Rte_07282]
                                                       [SWS_Rte_07295] [SWS_Rte_07504]
                                                       [SWS_Rte_07528] [SWS_Rte_07694]
                                                       [SWS_Rte_08765] [SWS_Rte_08789]
                                                       [SWS_Rte_08790]
 [SRS_BSW_00353]   All integer type definitions of     [SWS_Rte_01163] [SWS_Rte_01164]
                   target and compiler specific        [SWS_Rte_07104] [SWS_Rte_07641]
                   scope shall be placed and
                   organized in a single type
                   header
 [SRS_BSW_00384]   The Basic Software Module           [SWS_Rte_01412]
                   specifications shall specify at
                   least in the description which
                   other modules they require
                                                 [SWS_Rte_07006] [SWS_Rte_07007]
                                                 [SWS_Rte_07026] [SWS_Rte_07028]
                                                 [SWS_Rte_07039] [SWS_Rte_07044]
                                                 [SWS_Rte_07057] [SWS_Rte_07075]
                                                 [SWS_Rte_07101] [SWS_Rte_07135]
                                                 [SWS_Rte_07157] [SWS_Rte_07170]
                                                 [SWS_Rte_07175] [SWS_Rte_07181]
                                                 [SWS_Rte_07190] [SWS_Rte_07191]
                                                 [SWS_Rte_07192] [SWS_Rte_07343]
                                                 [SWS_Rte_07347] [SWS_Rte_07353]
                                                 [SWS_Rte_07356] [SWS_Rte_07402]
                                                 [SWS_Rte_07403] [SWS_Rte_07516]
                                                 [SWS_Rte_07524] [SWS_Rte_07545]
                                                 [SWS_Rte_07548] [SWS_Rte_07549]
                                                 [SWS_Rte_07564] [SWS_Rte_07588]
                                                 [SWS_Rte_07610] [SWS_Rte_07621]
                                                 [SWS_Rte_07638] [SWS_Rte_07640]
                                                 [SWS_Rte_07642] [SWS_Rte_07654]
                                                 [SWS_Rte_07662] [SWS_Rte_07667]
                                                 [SWS_Rte_07670] [SWS_Rte_07681]
                                                 [SWS_Rte_07686] [SWS_Rte_07803]
                                                 [SWS_Rte_07808] [SWS_Rte_07809]
                                                 [SWS_Rte_07810] [SWS_Rte_07811]
                                                 [SWS_Rte_07812] [SWS_Rte_07842]
                                                 [SWS_Rte_07845] [SWS_Rte_07927]
                                                 [SWS_Rte_08072] [SWS_Rte_08076]
                                                 [SWS_Rte_08311] [SWS_Rte_08417]
                                                 [SWS_Rte_08423] [SWS_Rte_08603]
                                                 [SWS_Rte_08604] [SWS_Rte_08605]
                                                 [SWS_Rte_08700] [SWS_Rte_08767]
                                                 [SWS_Rte_08768] [SWS_Rte_08788]
                                                 [SWS_Rte_08800]
 [SRS_Rte_00019]   RTE is the communication      [SWS_Rte_01264] [SWS_Rte_02527]
                   infrastructure                [SWS_Rte_02528] [SWS_Rte_02610]
                                                 [SWS_Rte_02611] [SWS_Rte_02612]
                                                 [SWS_Rte_03000] [SWS_Rte_03001]
                                                 [SWS_Rte_03002] [SWS_Rte_03004]
                                                 [SWS_Rte_03005] [SWS_Rte_03007]
                                                 [SWS_Rte_03008] [SWS_Rte_03760]
                                                 [SWS_Rte_03761] [SWS_Rte_03762]
                                                 [SWS_Rte_03769] [SWS_Rte_03775]
                                                 [SWS_Rte_03776] [SWS_Rte_03795]
                                                 [SWS_Rte_03796] [SWS_Rte_04515]
                                                 [SWS_Rte_04516] [SWS_Rte_04520]
                                                 [SWS_Rte_04522] [SWS_Rte_04526]
                                                 [SWS_Rte_04527] [SWS_Rte_05065]
                                                 [SWS_Rte_05084] [SWS_Rte_05085]
                                                 [SWS_Rte_05500] [SWS_Rte_06000]
                                                 [SWS_Rte_06011] [SWS_Rte_06023]
                                                 [SWS_Rte_06024] [SWS_Rte_07662]
                                                 [SWS_Rte_08001] [SWS_Rte_08002]
                                                 [SWS_Rte_08586] [SWS_Rte_08587]
 [SRS_Rte_00020]   Access to OS                  [SWS_Rte_02250]
 [SRS_Rte_00021]   Per-ECU RTE customization     [SWS_Rte_01316] [SWS_Rte_05000]
 [SRS_Rte_00022]   Interaction with call-backs   [SWS_Rte_01165]
                                [SWS_Rte_01289] [SWS_Rte_01290]
                                [SWS_Rte_01293] [SWS_Rte_01294]
                                [SWS_Rte_01296] [SWS_Rte_01297]
                                [SWS_Rte_01298] [SWS_Rte_01299]
                                [SWS_Rte_01300] [SWS_Rte_01301]
                                [SWS_Rte_01302] [SWS_Rte_01303]
                                [SWS_Rte_01304] [SWS_Rte_01305]
                                [SWS_Rte_01306] [SWS_Rte_01307]
                                [SWS_Rte_01308] [SWS_Rte_01309]
                                [SWS_Rte_01310] [SWS_Rte_01312]
                                [SWS_Rte_01313] [SWS_Rte_01342]
                                [SWS_Rte_01343] [SWS_Rte_01349]
                                [SWS_Rte_01354] [SWS_Rte_01355]
                                [SWS_Rte_01363] [SWS_Rte_01364]
                                [SWS_Rte_01365] [SWS_Rte_01366]
                                [SWS_Rte_02301] [SWS_Rte_02302]
                                [SWS_Rte_02588] [SWS_Rte_02589]
                                [SWS_Rte_02607] [SWS_Rte_02608]
                                [SWS_Rte_02613] [SWS_Rte_02614]
                                [SWS_Rte_02615] [SWS_Rte_02616]
                                [SWS_Rte_02617] [SWS_Rte_02618]
                                [SWS_Rte_02619] [SWS_Rte_02620]
                                [SWS_Rte_02621] [SWS_Rte_02623]
                                [SWS_Rte_02632] [SWS_Rte_02666]
                                [SWS_Rte_02676] [SWS_Rte_02677]
                                [SWS_Rte_02678] [SWS_Rte_02679]
                                [SWS_Rte_02730] [SWS_Rte_03014]
                                [SWS_Rte_03562] [SWS_Rte_03567]
                                [SWS_Rte_03602] [SWS_Rte_03603]
                                [SWS_Rte_03605] [SWS_Rte_03706]
                                [SWS_Rte_03707] [SWS_Rte_03716]
                                [SWS_Rte_03717] [SWS_Rte_03718]
                                [SWS_Rte_03719] [SWS_Rte_03720]
                                [SWS_Rte_03721] [SWS_Rte_03723]
                                [SWS_Rte_03725] [SWS_Rte_03726]
                                [SWS_Rte_03730] [SWS_Rte_03731]
                                [SWS_Rte_03733] [SWS_Rte_03734]
                                [SWS_Rte_03739] [SWS_Rte_03740]
                                [SWS_Rte_03746] [SWS_Rte_03752]
                                [SWS_Rte_03791] [SWS_Rte_03799]
                                [SWS_Rte_03801] [SWS_Rte_03812]
                                [SWS_Rte_03835] [SWS_Rte_03837]
                                [SWS_Rte_03927] [SWS_Rte_03930]
                                [SWS_Rte_03949] [SWS_Rte_03952]
                                [SWS_Rte_04545] [SWS_Rte_05510]
                                [SWS_Rte_05511] [SWS_Rte_06205]
                                [SWS_Rte_06208] [SWS_Rte_06209]
                                [SWS_Rte_06639] [SWS_Rte_06713]
                                                        [SWS_Rte_06817] [SWS_Rte_06818]
                                                        [SWS_Rte_06819] [SWS_Rte_06820]
                                                        [SWS_Rte_06821] [SWS_Rte_06823]
                                                        [SWS_Rte_06827] [SWS_Rte_06831]
                                                        [SWS_Rte_07137] [SWS_Rte_07138]
                                                        [SWS_Rte_07170] [SWS_Rte_07225]
                                                        [SWS_Rte_07226] [SWS_Rte_07227]
                                                        [SWS_Rte_07228] [SWS_Rte_07291]
                                                        [SWS_Rte_07395] [SWS_Rte_07396]
                                                        [SWS_Rte_07416] [SWS_Rte_07677]
                                                        [SWS_Rte_07837] [SWS_Rte_07838]
                                                        [SWS_Rte_07839] [SWS_Rte_07850]
                                                        [SWS_Rte_07851] [SWS_Rte_08073]
                                                        [SWS_Rte_08091] [SWS_Rte_08092]
                                                        [SWS_Rte_08093] [SWS_Rte_08094]
                                                        [SWS_Rte_08309] [SWS_Rte_08312]
                                                        [SWS_Rte_08777] [SWS_Rte_08778]
                                                        [SWS_Rte_08779] [SWS_Rte_08780]
                                                        [SWS_Rte_08782] [SWS_Rte_08783]
                                                        [SWS_Rte_08784] [SWS_Rte_08785]
                                                        [SWS_Rte_08786]
 [SRS_Rte_00052]   Initialization and finalization of   [SWS_Rte_02503] [SWS_Rte_02562]
                   components                           [SWS_Rte_02564] [SWS_Rte_02707]
                                                        [SWS_Rte_03852] [SWS_Rte_07046]
 [SRS_Rte_00055]   RTE use of global namespace          [SWS_Rte_01171] [SWS_Rte_06706]
                                                        [SWS_Rte_06707] [SWS_Rte_06708]
                                                        [SWS_Rte_06812] [SWS_Rte_06813]
                                                        [SWS_Rte_07036] [SWS_Rte_07037]
                                                        [SWS_Rte_07104] [SWS_Rte_07109]
                                                        [SWS_Rte_07110] [SWS_Rte_07111]
                                                        [SWS_Rte_07114] [SWS_Rte_07115]
                                                        [SWS_Rte_07116] [SWS_Rte_07117]
                                                        [SWS_Rte_07118] [SWS_Rte_07119]
                                                        [SWS_Rte_07144] [SWS_Rte_07145]
                                                        [SWS_Rte_07146] [SWS_Rte_07148]
                                                        [SWS_Rte_07149] [SWS_Rte_07162]
                                                        [SWS_Rte_07163] [SWS_Rte_07166]
                                                        [SWS_Rte_07284]
 [SRS_Rte_00059]   RTE API shall pass "in" primitive    [SWS_Rte_01017] [SWS_Rte_01020]
                   data types by value                  [SWS_Rte_06805] [SWS_Rte_06807]
                                                        [SWS_Rte_07069] [SWS_Rte_07070]
                                                        [SWS_Rte_07071] [SWS_Rte_07072]
                                                        [SWS_Rte_07073] [SWS_Rte_07074]
                                                        [SWS_Rte_07076] [SWS_Rte_07077]
                                                        [SWS_Rte_07078] [SWS_Rte_07079]
                                                        [SWS_Rte_07080] [SWS_Rte_07081]
                                                        [SWS_Rte_07083] [SWS_Rte_07084]
                                                        [SWS_Rte_07661] [SWS_Rte_08300]
 [SRS_Rte_00060]   RTE API shall pass "in"              [SWS_Rte_01018] [SWS_Rte_05107]
                   composite data types by              [SWS_Rte_05108] [SWS_Rte_06804]
                   reference                            [SWS_Rte_06807] [SWS_Rte_07082]
                                                        [SWS_Rte_07084] [SWS_Rte_07086]
                                                      [SWS_Rte_03757] [SWS_Rte_03758]
                                                      [SWS_Rte_03774] [SWS_Rte_03775]
                                                      [SWS_Rte_03776] [SWS_Rte_05065]
                                                      [SWS_Rte_05084] [SWS_Rte_05085]
                                                      [SWS_Rte_05504] [SWS_Rte_06771]
                                                      [SWS_Rte_07055] [SWS_Rte_07286]
                                                      [SWS_Rte_07367] [SWS_Rte_07374]
                                                      [SWS_Rte_07375] [SWS_Rte_07376]
                                                      [SWS_Rte_07379] [SWS_Rte_07557]
                                                      [SWS_Rte_07558] [SWS_Rte_07560]
                                                      [SWS_Rte_07561] [SWS_Rte_07634]
                                                      [SWS_Rte_07635] [SWS_Rte_07636]
                                                      [SWS_Rte_07637] [SWS_Rte_07646]
                                                      [SWS_Rte_07647] [SWS_Rte_07648]
                                                      [SWS_Rte_07650] [SWS_Rte_07651]
                                                      [SWS_Rte_07652] [SWS_Rte_07659]
                                                      [SWS_Rte_07660] [SWS_Rte_07846]
                                                      [SWS_Rte_07847] [SWS_Rte_07848]
                                                      [SWS_Rte_07849] [SWS_Rte_07850]
                                                      [SWS_Rte_07851] [SWS_Rte_07927]
                                                      [SWS_Rte_08017] [SWS_Rte_08018]
                                                      [SWS_Rte_08020] [SWS_Rte_08021]
                                                      [SWS_Rte_08022] [SWS_Rte_08023]
                                                      [SWS_Rte_08043] [SWS_Rte_08044]
                                                      [SWS_Rte_08045] [SWS_Rte_08074]
                                                      [SWS_Rte_08075] [SWS_Rte_08076]
                                                      [SWS_Rte_08583]
 [SRS_Rte_00123]   The RTE shall forward              [SWS_Rte_01103] [SWS_Rte_02576]
                   application level errors from      [SWS_Rte_02577] [SWS_Rte_02578]
                   server to client                   [SWS_Rte_02593] [SWS_Rte_07925]
                                                      [SWS_Rte_07926] [SWS_Rte_08705]
                                                      [SWS_Rte_08709]
 [SRS_Rte_00124]   API for application level errors   [SWS_Rte_01103] [SWS_Rte_01130]
                   during Client Server               [SWS_Rte_02573] [SWS_Rte_02575]
                   communication
 [SRS_Rte_00126]   C language support                 [SWS_Rte_01005] [SWS_Rte_01162]
                                                      [SWS_Rte_01167] [SWS_Rte_01169]
                                                      [SWS_Rte_03709] [SWS_Rte_03710]
                                                      [SWS_Rte_03724] [SWS_Rte_07124]
                                                      [SWS_Rte_07125] [SWS_Rte_07126]
                                                      [SWS_Rte_07297] [SWS_Rte_07298]
                                                      [SWS_Rte_07299] [SWS_Rte_07507]
                                                      [SWS_Rte_07508] [SWS_Rte_07509]
                                                      [SWS_Rte_07678] [SWS_Rte_07923]
 [SRS_Rte_00128]   Implicit Reception                 [SWS_Rte_01268] [SWS_Rte_03598]
                                                      [SWS_Rte_03599] [SWS_Rte_03741]
                                                      [SWS_Rte_03954] [SWS_Rte_03955]
                                                      [SWS_Rte_03956] [SWS_Rte_06000]
                                                      [SWS_Rte_06001] [SWS_Rte_06004]
                                                      [SWS_Rte_06011] [SWS_Rte_07007]
                                                      [SWS_Rte_07020] [SWS_Rte_07062]
                                                      [SWS_Rte_07063] [SWS_Rte_07064]
                                                      [SWS_Rte_07652] [SWS_Rte_08408]
                                                  [SWS_Rte_05099] [SWS_Rte_05101]
                                                  [SWS_Rte_05102] [SWS_Rte_05170]
                                                  [SWS_Rte_06030] [SWS_Rte_06210]
                                                  [SWS_Rte_07378] [SWS_Rte_07655]
                                                  [SWS_Rte_07659] [SWS_Rte_07660]
                                                  [SWS_Rte_07663] [SWS_Rte_07667]
                                                  [SWS_Rte_07668] [SWS_Rte_07669]
                                                  [SWS_Rte_07847]
 [SRS_Rte_00140]   Binary-code AUTOSAR software   [SWS_Rte_01000] [SWS_Rte_01195]
                   components                     [SWS_Rte_01315] [SWS_Rte_07120]
 [SRS_Rte_00141]   Explicit Reception             [SWS_Rte_01072] [SWS_Rte_01091]
                                                  [SWS_Rte_01092] [SWS_Rte_06011]
                                                  [SWS_Rte_07394] [SWS_Rte_07673]
 [SRS_Rte_00142]   Support for InterRunnable      [SWS_Rte_01303] [SWS_Rte_01304]
                   Variables                      [SWS_Rte_01305] [SWS_Rte_01306]
                                                  [SWS_Rte_01350] [SWS_Rte_01351]
                                                  [SWS_Rte_02636] [SWS_Rte_03516]
                                                  [SWS_Rte_03517] [SWS_Rte_03519]
                                                  [SWS_Rte_03550] [SWS_Rte_03553]
                                                  [SWS_Rte_03560] [SWS_Rte_03562]
                                                  [SWS_Rte_03565] [SWS_Rte_03567]
                                                  [SWS_Rte_03580] [SWS_Rte_03582]
                                                  [SWS_Rte_03583] [SWS_Rte_03584]
                                                  [SWS_Rte_03589] [SWS_Rte_06207]
                                                  [SWS_Rte_06208] [SWS_Rte_07007]
                                                  [SWS_Rte_07022] [SWS_Rte_07187]
 [SRS_Rte_00143]   Mode Switches                  [SWS_Rte_02500] [SWS_Rte_02503]
                                                  [SWS_Rte_02504] [SWS_Rte_02512]
                                                  [SWS_Rte_02544] [SWS_Rte_02546]
                                                  [SWS_Rte_02562] [SWS_Rte_02563]
                                                  [SWS_Rte_02564] [SWS_Rte_02587]
                                                  [SWS_Rte_02630] [SWS_Rte_02631]
                                                  [SWS_Rte_02634] [SWS_Rte_02661]
                                                  [SWS_Rte_02662] [SWS_Rte_02663]
                                                  [SWS_Rte_02664] [SWS_Rte_02665]
                                                  [SWS_Rte_02667] [SWS_Rte_02668]
                                                  [SWS_Rte_02669] [SWS_Rte_02675]
                                                  [SWS_Rte_02679] [SWS_Rte_02706]
                                                  [SWS_Rte_02707] [SWS_Rte_02708]
                                                  [SWS_Rte_02730] [SWS_Rte_06766]
                                                  [SWS_Rte_06767] [SWS_Rte_06768]
                                                  [SWS_Rte_06769] [SWS_Rte_06770]
                                                  [SWS_Rte_06772] [SWS_Rte_06773]
                                                  [SWS_Rte_06774] [SWS_Rte_06775]
                                                  [SWS_Rte_06776] [SWS_Rte_06777]
                                                  [SWS_Rte_06778] [SWS_Rte_06779]
                                                  [SWS_Rte_06780] [SWS_Rte_06785]
                                                  [SWS_Rte_06786] [SWS_Rte_06787]
                                                  [SWS_Rte_06788] [SWS_Rte_06789]
                                                  [SWS_Rte_06790] [SWS_Rte_06791]
                                                       [SWS_Rte_06792] [SWS_Rte_06793]
                                                       [SWS_Rte_06794] [SWS_Rte_06795]
                                                       [SWS_Rte_06796] [SWS_Rte_06797]
                                                       [SWS_Rte_07056] [SWS_Rte_07057]
                                                       [SWS_Rte_07058] [SWS_Rte_07059]
                                                       [SWS_Rte_07060] [SWS_Rte_07150]
                                                       [SWS_Rte_07151] [SWS_Rte_07152]
                                                       [SWS_Rte_07153] [SWS_Rte_07154]
                                                       [SWS_Rte_07155] [SWS_Rte_07157]
                                                       [SWS_Rte_07173] [SWS_Rte_07259]
                                                       [SWS_Rte_07533] [SWS_Rte_07535]
                                                       [SWS_Rte_07559] [SWS_Rte_07564]
 [SRS_Rte_00144]   RTE shall support the               [SWS_Rte_02508] [SWS_Rte_02544]
                   notification of mode switches via   [SWS_Rte_02546] [SWS_Rte_02549]
                   AUTOSAR interfaces                  [SWS_Rte_02566] [SWS_Rte_02567]
                                                       [SWS_Rte_02568] [SWS_Rte_02624]
                                                       [SWS_Rte_02628] [SWS_Rte_02659]
                                                       [SWS_Rte_02660] [SWS_Rte_02732]
                                                       [SWS_Rte_02738] [SWS_Rte_03858]
                                                       [SWS_Rte_03859] [SWS_Rte_06742]
                                                       [SWS_Rte_06743] [SWS_Rte_06744]
                                                       [SWS_Rte_06745] [SWS_Rte_06746]
                                                       [SWS_Rte_06747] [SWS_Rte_06766]
                                                       [SWS_Rte_06767] [SWS_Rte_06772]
                                                       [SWS_Rte_06773] [SWS_Rte_06774]
                                                       [SWS_Rte_06775] [SWS_Rte_06776]
                                                       [SWS_Rte_06777] [SWS_Rte_06778]
                                                       [SWS_Rte_06779] [SWS_Rte_06780]
                                                       [SWS_Rte_06781] [SWS_Rte_06782]
                                                       [SWS_Rte_06783] [SWS_Rte_06784]
                                                       [SWS_Rte_06785] [SWS_Rte_06786]
                                                       [SWS_Rte_06787] [SWS_Rte_06788]
                                                       [SWS_Rte_06789] [SWS_Rte_06790]
                                                       [SWS_Rte_06791] [SWS_Rte_06792]
                                                       [SWS_Rte_06793] [SWS_Rte_06794]
                                                       [SWS_Rte_06795] [SWS_Rte_06796]
                                                       [SWS_Rte_06797] [SWS_Rte_07155]
                                                       [SWS_Rte_07262] [SWS_Rte_07540]
                                                       [SWS_Rte_07640] [SWS_Rte_07666]
                                                       [SWS_Rte_08500] [SWS_Rte_08504]
                                                       [SWS_Rte_08505] [SWS_Rte_08506]
                                                       [SWS_Rte_08509] [SWS_Rte_08510]
 [SRS_Rte_00145]   Compatibility mode                  [SWS_Rte_01151] [SWS_Rte_01216]
                                                       [SWS_Rte_01234] [SWS_Rte_01257]
                                                       [SWS_Rte_01277] [SWS_Rte_01279]
                                                       [SWS_Rte_01326] [SWS_Rte_03794]
 [SRS_Rte_00146]   Vendor mode                         [SWS_Rte_01234]
                                                       [SWS_Rte_05123] [SWS_Rte_05124]
                                                       [SWS_Rte_05125] [SWS_Rte_05136]
                                                       [SWS_Rte_05168] [SWS_Rte_05169]
                                                       [SWS_Rte_05170] [SWS_Rte_05172]
                                                       [SWS_Rte_05174] [SWS_Rte_05175]
                                                       [SWS_Rte_05176] [SWS_Rte_06206]
                                                       [SWS_Rte_06700] [SWS_Rte_06701]
                                                       [SWS_Rte_06702] [SWS_Rte_06726]
                                                       [SWS_Rte_07160] [SWS_Rte_07174]
                                                       [SWS_Rte_07197] [SWS_Rte_07198]
                                                       [SWS_Rte_07344] [SWS_Rte_07349]
 [SRS_Rte_00154]   Support for Calibration             [SWS_Rte_03835] [SWS_Rte_03905]
                                                       [SWS_Rte_03906] [SWS_Rte_03907]
                                                       [SWS_Rte_03908] [SWS_Rte_03909]
                                                       [SWS_Rte_03910] [SWS_Rte_03911]
                                                       [SWS_Rte_03912] [SWS_Rte_03913]
                                                       [SWS_Rte_03914] [SWS_Rte_03915]
                                                       [SWS_Rte_03916] [SWS_Rte_03922]
                                                       [SWS_Rte_03932] [SWS_Rte_03933]
                                                       [SWS_Rte_03934] [SWS_Rte_03935]
                                                       [SWS_Rte_03936] [SWS_Rte_03942]
                                                       [SWS_Rte_03943] [SWS_Rte_03947]
                                                       [SWS_Rte_03948] [SWS_Rte_03949]
                                                       [SWS_Rte_03958] [SWS_Rte_03959]
                                                       [SWS_Rte_03960] [SWS_Rte_03961]
                                                       [SWS_Rte_03962] [SWS_Rte_03963]
                                                       [SWS_Rte_03964] [SWS_Rte_03965]
                                                       [SWS_Rte_03968] [SWS_Rte_03970]
                                                       [SWS_Rte_03971] [SWS_Rte_05112]
                                                       [SWS_Rte_05145] [SWS_Rte_05194]
                                                       [SWS_Rte_06815] [SWS_Rte_06816]
                                                       [SWS_Rte_07029] [SWS_Rte_07030]
                                                       [SWS_Rte_07033] [SWS_Rte_07034]
                                                       [SWS_Rte_07035] [SWS_Rte_07096]
                                                       [SWS_Rte_07185] [SWS_Rte_07186]
                                                       [SWS_Rte_07693]
 [SRS_Rte_00155]   API to access calibration           [SWS_Rte_01252] [SWS_Rte_01300]
                   parameters                          [SWS_Rte_03835] [SWS_Rte_03927]
                                                       [SWS_Rte_03928] [SWS_Rte_03929]
                                                       [SWS_Rte_03930] [SWS_Rte_03949]
                                                       [SWS_Rte_03952] [SWS_Rte_07093]
                                                       [SWS_Rte_07094] [SWS_Rte_07095]
 [SRS_Rte_00156]   Support for different calibration   [SWS_Rte_03905] [SWS_Rte_03906]
                   data emulation methods              [SWS_Rte_03908] [SWS_Rte_03909]
                                                       [SWS_Rte_03910] [SWS_Rte_03911]
                                                       [SWS_Rte_03913] [SWS_Rte_03914]
                                                       [SWS_Rte_03915] [SWS_Rte_03916]
                                                       [SWS_Rte_03922] [SWS_Rte_03932]
                                                       [SWS_Rte_03933] [SWS_Rte_03934]
                                                       [SWS_Rte_03935] [SWS_Rte_03936]
                                                       [SWS_Rte_03942] [SWS_Rte_03943]
                                                       [SWS_Rte_03947] [SWS_Rte_03948]
                                                       [SWS_Rte_03960] [SWS_Rte_03961]
                                                       [SWS_Rte_03962] [SWS_Rte_03963]
                                                       [SWS_Rte_03964] [SWS_Rte_03965]
                                                       [SWS_Rte_03968] [SWS_Rte_03970]
                                                       [SWS_Rte_03971] [SWS_Rte_05145]
                                                       [SWS_Rte_06816]
 [SRS_Rte_00157]   Support for calibration             [SWS_Rte_03936]
                   parameters in NVRAM
 [SRS_Rte_00158]   Support separation of calibration   [SWS_Rte_03907] [SWS_Rte_03908]
                   parameters                          [SWS_Rte_03911] [SWS_Rte_03912]
                                                       [SWS_Rte_03959] [SWS_Rte_05145]
                                                       [SWS_Rte_05194] [SWS_Rte_07096]
 [SRS_Rte_00159]   Sharing of calibration              [SWS_Rte_02749] [SWS_Rte_02750]
                   parameters                          [SWS_Rte_03958] [SWS_Rte_05112]
                                                       [SWS_Rte_07186]
 [SRS_Rte_00160]   Debounced start of Runnable         [SWS_Rte_02697]
                   Entities
 [SRS_Rte_00161]   Activation offset of Runnable       [SWS_Rte_07000]
                   Entities
 [SRS_Rte_00162]   "1:n" External Trigger              [SWS_Rte_06210] [SWS_Rte_07200]
                   communication                       [SWS_Rte_07201] [SWS_Rte_07207]
                                                       [SWS_Rte_07212] [SWS_Rte_07213]
                                                       [SWS_Rte_07214] [SWS_Rte_07215]
                                                       [SWS_Rte_07216] [SWS_Rte_07218]
                                                       [SWS_Rte_07229] [SWS_Rte_07543]
 [SRS_Rte_00163]   Support for InterRunnable           [SWS_Rte_07203] [SWS_Rte_07204]
                   Triggering                          [SWS_Rte_07208] [SWS_Rte_07220]
                                                       [SWS_Rte_07221] [SWS_Rte_07223]
                                                       [SWS_Rte_07224] [SWS_Rte_07226]
                                                       [SWS_Rte_07227] [SWS_Rte_07228]
                                                       [SWS_Rte_07229] [SWS_Rte_07555]
 [SRS_Rte_00164]   Ensure a unique naming of           [SWS_Rte_06706] [SWS_Rte_06707]
                   generated types visible in the      [SWS_Rte_06708] [SWS_Rte_06812]
                   global namespace                    [SWS_Rte_06813] [SWS_Rte_07110]
                                                       [SWS_Rte_07111] [SWS_Rte_07114]
                                                       [SWS_Rte_07115] [SWS_Rte_07116]
                                                       [SWS_Rte_07117] [SWS_Rte_07118]
                                                       [SWS_Rte_07119] [SWS_Rte_07144]
                                                       [SWS_Rte_07145] [SWS_Rte_07146]
 [SRS_Rte_00165]   Suppress identical "C" type         [SWS_Rte_07105] [SWS_Rte_07107]
                   re-definitions                      [SWS_Rte_07112] [SWS_Rte_07113]
                                                       [SWS_Rte_07134] [SWS_Rte_07143]
                                                       [SWS_Rte_07167] [SWS_Rte_07169]
 [SRS_Rte_00166]   Use the AUTOSAR Standard            [SWS_Rte_07036] [SWS_Rte_07037]
                   Types in the global namespace if    [SWS_Rte_07104] [SWS_Rte_07109]
                   the AUTOSAR data type is            [SWS_Rte_07148] [SWS_Rte_07149]
                   mapped to an AUTOSAR                [SWS_Rte_07162] [SWS_Rte_07163]
                   Standard Type                       [SWS_Rte_07166]
                                                       [SWS_Rte_06111] [SWS_Rte_06112]
                                                       [SWS_Rte_06113] [SWS_Rte_06114]
                                                       [SWS_Rte_06115] [SWS_Rte_06120]
                                                       [SWS_Rte_07833] [SWS_Rte_07834]
                                                       [SWS_Rte_07835] [SWS_Rte_07836]
                                                       [SWS_Rte_07837] [SWS_Rte_07838]
                                                       [SWS_Rte_07839] [SWS_Rte_07840]
                                                       [SWS_Rte_07841]
 [SRS_Rte_00245]   Support of Writing Strategies for   [SWS_Rte_07416] [SWS_Rte_08080]
                   NV data                             [SWS_Rte_08081] [SWS_Rte_08082]
                                                       [SWS_Rte_08083] [SWS_Rte_08084]
                                                       [SWS_Rte_08085] [SWS_Rte_08086]
                                                       [SWS_Rte_08087] [SWS_Rte_08088]
                                                       [SWS_Rte_08089] [SWS_Rte_08090]
                                                       [SWS_Rte_08091] [SWS_Rte_08092]
                                                       [SWS_Rte_08093] [SWS_Rte_08094]
                                                       [SWS_Rte_08111]
 [SRS_Rte_00246]   Support of Efficient COM for        [SWS_Rte_01376] [SWS_Rte_01379]
                   large data                          [SWS_Rte_01380] [SWS_Rte_01381]
                                                       [SWS_Rte_01382] [SWS_Rte_01383]
                                                       [SWS_Rte_01384] [SWS_Rte_01385]
                                                       [SWS_Rte_01386] [SWS_Rte_01387]
                                                       [SWS_Rte_01388] [SWS_Rte_01389]
                                                       [SWS_Rte_01390] [SWS_Rte_01391]
                                                       [SWS_Rte_01392] [SWS_Rte_01393]
                                                       [SWS_Rte_01394] [SWS_Rte_01395]
                                                       [SWS_Rte_01396] [SWS_Rte_01397]
                                                       [SWS_Rte_01398] [SWS_Rte_01399]
                                                       [SWS_Rte_01400] [SWS_Rte_01401]
                                                       [SWS_Rte_01402] [SWS_Rte_01403]
                                                       [SWS_Rte_01404] [SWS_Rte_01405]
                                                       [SWS_Rte_01406] [SWS_Rte_01407]
                                                       [SWS_Rte_01408] [SWS_Rte_01409]
                                                       [SWS_Rte_01410] [SWS_Rte_01411]
 [SRS_Rte_00247]   The Rte shall execute               [SWS_Rte_04540] [SWS_Rte_04541]
                   transformer chains for SWC          [SWS_Rte_06023] [SWS_Rte_08110]
                   communication                       [SWS_Rte_08515] [SWS_Rte_08516]
                                                       [SWS_Rte_08517] [SWS_Rte_08518]
                                                       [SWS_Rte_08519] [SWS_Rte_08520]
                                                       [SWS_Rte_08521] [SWS_Rte_08522]
                                                       [SWS_Rte_08523] [SWS_Rte_08524]
                                                       [SWS_Rte_08525] [SWS_Rte_08526]
                                                       [SWS_Rte_08527] [SWS_Rte_08528]
                                                       [SWS_Rte_08529] [SWS_Rte_08530]
                                                       [SWS_Rte_08538] [SWS_Rte_08570]
                                                       [SWS_Rte_08571] [SWS_Rte_08587]
                                                       [SWS_Rte_08588] [SWS_Rte_08589]
                                                       [SWS_Rte_08590] [SWS_Rte_08596]
                                                       [SWS_Rte_08597] [SWS_Rte_08598]
                                                       [SWS_Rte_08599] [SWS_Rte_08793]
                                                       [SWS_Rte_08794] [SWS_Rte_08795]
                                                       [SWS_Rte_08796] [SWS_Rte_08797]
                                                       [SWS_Rte_08798] [SWS_Rte_08799]
2 RTE Overview
2.2.3 Communication
The RTE provides different paradigms for the communication between software-
component instances: sender-receiver (signal passing), client-server (function invo-
cation), mode switch, and NvBlockSwComponentType interaction.
Each communication paradigm can be applied to intra-partition software-component
distribution (which includes both intra-task and inter-task distribution, within the same
Partition), inter-Partition software-component distribution, and inter-ECU software-
component distribution. Intra-task communication occurs between runnable entities
that are mapped to the same OS task whereas inter-task communication occurs be-
tween runnable entities mapped to different tasks of the same Partition and can there-
fore involve a context switch. Inter-Partition communication occurs between runnable
entities in components mapped to different partitions of the same ECU and therefore in-
volve a context switch and crossing a protection boundary (memory protection, timing
protection, isolation on a core). Inter-ECU communication occurs between runnable
entities in components that have been mapped to different ECUs and so is inherently
concurrent and involves potentially unreliable communication.
Details of the communication paradigms that are supported by the RTE are contained
in Section 4.3.
      The term implicit is used here since the runnable does not actively initiate the
      reception or transmission of data.
Implicit and explicit communication is considered in greater detail in Section 4.3.1.5.
2.2.3.4 Multiplicity
As well as point to point communication (i.e. 1:1) the RTE supports communication
connections with multiple providers or requires:
    When using sender-receiver communication, the RTE supports both 1:n (sin-
     gle sender with multiple receivers) [SRS_Rte_00028] and n:1 (multiple senders
     and a single receiver) [SRS_Rte_00131] communication with the restriction that
     multiple senders are not allowed for mode switch notifications, see meta-
     model restrictions [SWS_Rte_02670].
      The execution of the multiple senders or receivers is not coordinated by the RTE.
      This means that the actions of different software-components are independent 
      the RTE does not ensure that different senders transmit data simultaneously and
      does not ensure that all receivers read data or receive events simultaneously.
    When using client-server communication, the RTE supports n:1 (multiple clients
     and a single server) [SRS_Rte_00029] communication. The RTE does not sup-
     port 1:n (single client with multiple servers) client-server communication.
Irrespective of whether 1:1, n:1 or 1:n communication is used, the RTE is respon-
sible for implementing the communication connections and therefore the AUTOSAR
software-component is unaware of the configuration. This permits an AUTOSAR
software-component to be redeployed in a different configuration without modification.
2.2.4 Concurrency
AUTOSAR software-components have no direct access to the OS and hence there are
no tasks in an AUTOSAR application. Instead, concurrent activity within AUTOSAR
is based around RunnableEntitys within components that are invoked by the RTE.
The AUTOSAR VFB specification [1] defines a runnable entity as a sequence of in-
structions that can be started by the Run-Time Environment. A component provides
usually one3 or more runnable entities [SRS_Rte_00031] and each runnable entity
has exactly one entry point. An entry point defines the symbol within the software-
components code that provides the implementation of a runnable entity.
The RTE is responsible for invoking runnable entities  AUTOSAR software-
components are not able to (dynamically) create private threads of control. Hence,
all activity within an AUTOSAR application is initiated by the triggering of runnable en-
tities by the RTE as a result of RTEEvents.
An RTEEvent encompasses all possible situations that can trigger execution of a runn-
able entity by the RTE. The different classes of RTEEvent are defined in Section 5.7.5.
The RTE supports runnable entities in any component that has an AUTOSAR interface
- this includes AUTOSAR software-components and basic software modules.4
Runnable entities are divided into multiple categories with each category supporting
different facilities. The categories supported by the RTE are described in Section
4.2.2.3.
The RTE generator is one of a set of tools5 that create the realization of the AUTOSAR
virtual function bus for an ECU based on information in the ECU Configuration De-
scription. The RTE Generator is responsible for creating the AUTOSAR software-
component API functions that link AUTOSAR software-components to the OS and
manage communication between AUTOSAR software-components and between AU-
TOSAR software-components and basic software modules.
Additionally the RTE Generator creates both the Basic Software Scheduler and the Ba-
sic Software Scheduler API functions for each particular instance of a Basic Software
Module.
The RTE generation process for SWCs has two main phases:
   3
      There are use cases where a SWC might exist without any RunnableEntity.
   4
      The OS and COM are basic software modules but present a standardized interface to the RTE and
have no AUTOSAR interface. The OS and COM therefore do not have runnable entities.
    5
      The RTE generator works in conjunction with other tools, for example, the OS and COM generators,
to fully realize the AUTOSAR VFB.
        .XML                                            .XML
      Collection               Configure               System
          of                    System               Configuration
       Available                                      Description
         SWC                                           :System
    Implementations
                              .XML
        Generate               ECU                        Extract
        Base ECU            Extract of                 ECU-Specific
       Configuration         System                     Information
                           Configuration
                             :System
                                             .c                                 .obj
                                            RTE                               Compiled
                                            Code                                BSW
                                             .h                                 .obj
                                                                               Compiled
                                             RTE
                                                                                 SWC
                                            Header
                          AUTOSAR                                           Implementations
        Edit ECU            RTE
       Configuration      Generator
      AUTOSAR
         ECU
     Configuration
signals that correspond to the system signals will be later used by the RTE Generator
to actually transmit the application data.
In the next step the System Configuration Description is split into descriptions for
each individual ECU. During the generation of the Ecu Extract also the hierarchical
structure of the CompositionSwComponents of the VFB view is flattened and the
SwComponentPrototypes of the ECU Extract represent actual instances. The Ecu
Extract only contains information necessary to configure one ECU individually and it is
fed into the ECU Configuration for each ECU.
[SWS_Rte_05000] d The RTE is configured and generated for each ECU instance
individually. c(SRS_Rte_00021)
The ECU Configuration Editors (see also Section 3.3) are working iteratively on the
ECU Configuration Values until all configuration issues are resolved. There will be
the need for several configuration editors, each specialized on a specific part of ECU
Configuration. So one editor might be configuring the COM stack (not the communica-
tion matrix but the interaction of the individual modules) while another editor is used to
configure the RTE.
Since the configuration of a specific Basic-SW module is not entirely independent from
other modules there is the need to apply the editors several times to the ECU Config-
uration Values to ensure all configuration parameters are consistent.
Only when the configuration issues are resolved the RTE Generator will be used to
generate the actual RTE code (see also Section 3.4.2) which will then be compiled and
linked together with the other Basic-SW modules and the software-components code.
The RTE Generator needs to cope with many sources of information since the nec-
essary information for the RTE Generator is based on the ECU Configuration Values
which might be distributed over several files and itself references to multiple other AU-
TOSAR descriptions.
[SWS_Rte_08769] d RTE Generator shall support for reading single files and of sets
of files that are stored in a file system. The tool shall provide a mechanism to select a
specific file and sets of files in the file system. c(SRS_Rte_00048)
An AUTOSAR XML description can be shipped in several files. Some files could con-
tain data types others could contain interfaces, etc.
[SWS_Rte_08770] d An RTE Generator tools SHALL support the merging of AU-
TOSAR models that have been split up and stored in multiple partial models while
reading an set of files. Thereby the to be supported minimum granularity of an AU-
TOSAR model is defined by atpSplitable. The Merging of a model also in-
cludes the resolution of references. The RTE Generator SHALL be able to read the
submodels in any order. There is no preference. c(SRS_Rte_00048)
[SWS_Rte_08771] d RTE Generator SHALL support the interpretation and creation of
AUTOSAR XML descriptions. These descriptions SHALL be well-formed and valid
as defined by the XML recommendation, W3C XML 1.1 Specification, whether used
with or without the documents corresponding AUTOSAR XML schema(s). In other
words: Even if the tool does not use standard XML mechanisms for validating the XML
descriptions it SHALL ensure that the XML descriptions can be successfully validated
against the AUTOSAR XML schema. c(SRS_Rte_00048)
[SWS_Rte_08772] d If an RTE Generator wants to validate an AUTOSAR XML de-
scription against an AUTOSAR schema, it SHALL provide the necessary schema files
in its own resources.
An RTE Generator shall use the SYSTEM-Identifier in the xsi:schemaLocation to iden-
tify an appropriate schema file. c(SRS_Rte_00048)
[SWS_Rte_08773] d RTE Generator shall provide a serialization for XML. c
(SRS_Rte_00048)
[SWS_Rte_08774] d RTE Generator shall not change model content passed to the
Generator c(SRS_Rte_00048)
[SWS_Rte_08775] d An RTE Generator MAY support the AUTOSAR extension mech-
anism SDGs if applicable.
If the RTE Generator does not need the additional information for its intended purpose
it SHALL ignore the irrelevant extensions SDGs. c(SRS_Rte_00048)
[SWS_Rte_08776] d An RTE Generator may use well structured error messages. c
(SRS_Rte_00048)
The following list is a collection of proposed information items in particular applicable
to log files used for exchanging information about errors.
    ErrorCode  A symbolic name for the message text
    StandardErrorCode  The reference to the AUTOSAR error code
    ConstraintCode  Reference to the semantic constraint mentioned in the AU-
     TOSAR template specification.
    Signature  Signature of the message for duplicate checks
    Timestamp  A time stamp for the message
    ShortName  A unique identification which allows to refer to particular error mes-
     sages
     This can also be used to establish references between error messages, e.g. for
     screening and also to trace back to root cause
    Desc  The human readable message text
    Component  Such information item may help the user to locate the problem in
     the model
    BaseUrl  An url for a base directory which can be used as basis for file refer-
     ences in a log file. This is typically the root direactory of a project structure.
    ColumNumber  The column of the error position
                                        .c                  .obj
                                        Rte               Compiled
                                        Code                RTE
        .XML                                                                        .exe
        ECU              Generate               Compile              Generate       ECU
    Configuration         SchM                   SchM                Executable   Executable
       Values
                                        .h                  .obj
                                       Schm               Compiled
                                        Bsw                 BSW
                                       Header
       Edit ECU         AUTOSAR
      Configuration       RTE
                        Generator
      AUTOSAR
         ECU
     Configuration
        Editors
The ECU Configuration phase is the start of the Basic Software Scheduler configura-
tion where all the requirements of the different Basic Software Modules are collected.
The Input information is provided in the Basic Software Module Descriptions [9] of the
individual Basic Software Modules.
The Basic Software Scheduler configuration is then generated into the Basic Software
Scheduler code which is compiled and built into the Ecu executable.
                                        .XML
                                       SW-Component
                                      Type Description :
                                   AtomicSwComponentType
                                                                 .c
                .XML                                                           .XML
                                                             SW-Component
                                                 Implement   Implementation                       Measure
               SW-Component                      Component                    SW-Component        Resources
              Internal Behavior                                               Implementation
               Description [API                                                Description [for
                 Generation] :                                                 Object-Code] :
             SwcInternalBehavior                                              Implementation
                                 Generate                         Compile
                               Component API                     Component
                                                  .h                             .obj                    .XML
                          AUTOSAR              Component                        Compiled                SW-Component
                          Component               API                         SW-Component              Implementation
                             API                                              Implementation              Description
With the generated Component API (application header file) the Software Compo-
nent developer can provide the Software Components source code without being con-
cerned as to whether the communication will later be local or using some network(s).
It has to be considered that the AUTOSAR software-component development process
is iterative and that the AUTOSAR software-component description might be changed
during the development of the AUTOSAR software-component. This requires the ap-
plication header file to be regenerated to reflect the changes done in the software-
component description.
When the software-component has been compiled successfully the Component Im-
plementation Description Generation tool will analyze the resulting object files and
enhance the software-component description with the information from the specific im-
plementation. This includes information about the actual memory needs for ROM as
well as for RAM and goes into the Component Implementation Description section of
the AUTOSAR Software Component Template.
Please note that in case of implemented PreCompileTime variability addition-
ally the PreBuild Data Set Contract Phase is required 3.2 to be able to compile the
software component.
So when a software-component is delivered it will consist of the following parts:
    SW-Component Type Description
    SW-Component Internal Behavior Description
    The actual SW-Component implementation and/or compiled SW-Component
    SW-Component Implementation Description
The above listed information will be needed to provide enough information for the Sys-
tem Generation steps when the whole system is assembled.
To be able to support the Basic Software Module development with Basic Software
Scheduler specific APIs the Module Interlink Header ( 6.3.2) and Module Interlink
Types Header ( 6.3.1) containing the definitions and declaration for the Basic Soft-
ware Scheduler API related to the single Basic Software Module instance is generated
by the RTE Generator in the so called Basic Software Scheduler Contract Phase.
The required input is
    Basic Software Module Description and
    Basic Software Module Internal Behavior and
    Basic Software Module Implementation
Please note that in case of implemented PreCompileTime variability addition-
ally the PreBuild Data Set Contract Phase is required 3.2 to be able to compile the
Basic Software Module.
                                                               .XML
                                                              BSW-Module
                                                               Description :               .h
                                                           BswModuleDescription
                                                                                         RTE Header
               .XML                                                                                               .obj
                                                    Generate RTE                         Compile RTE            Compiled RTE
             ECU Configuration
                  Values
                                 AUTOSAR
                                   RTE
                                 Generator
                                                                                           .c
                                                                                          RTE Code
                                                                            .XML
                                                                            MC-Support
                                             .XML
                                       IOC-Configuration
The Basic Software Scheduler is a part of the Rte and therefore not explicitly shown in
figure 3.4.
Depending on the complexity of the ECU and the cooperation model of the different
software vendors it might be required to integrate the Basic Software stand alone with-
out software components.
Therefore the RTE Generator has to support the generation of the Basic Software
Scheduler without software component related RTE fragments. The Basic Software
Scheduler Generation Phase is only applicable for software builds which are not con-
taining any kind of software components.
[SWS_Rte_07569] d In the Basic Software Scheduler Generation Phase the RTE Gen-
erator shall generate the Basic Software Scheduler without the RTE functionality. c
(SRS_Rte_00221)
In this case the RTE Generator generates the API for Basic Software Modules and the
Basic Software Scheduling code only. When the input contains software component
related information this information raises an error.
For instance:
    Application Header Files are not generated for the software components con-
     tained in the ECU extract.
    Mapped RTEEvents are not permitted and the runnable calls are not generated
     into the OS task bodies. Nevertheless all OS task bodies related to the Basic
     Software Scheduler configuration are generated.
    Mode machine instances mapped to the RTE are not supported.
[SWS_Rte_07585] d In the Basic Software Scheduler Generation Phase the RTE Gen-
erator shall reject input configuration containing software component related informa-
tion. c(SRS_Rte_00221)
The RTE Generator in the Basic Software Scheduler Generation Phase is also respon-
sible to generate additional artifacts which contribute to the further build, deployment
and calibration of the ECUs software.
[SWS_Rte_06725] d The RTE Generator in Basic Software Scheduler Genera-
tion Phase shall provide its Basic Software Module Description in order to cap-
ture the generated RTEs / Basic Software Scheduler attributes. c(SRS_Rte_00170,
SRS_Rte_00192, SRS_Rte_00233)
Details about the Basic Software Module Description generation can can be found in
section 3.4.3.
[SWS_Rte_06726] d The RTE Generator in Basic Software Scheduler Generation
Phase shall provide an MC-Support (Measurement and Calibration) description as part
of the Basic Software Module Description. c(SRS_Rte_00153, SRS_Rte_00189)
Details about the MC-Support can be found in section 4.2.8.4.
For software builds which are containing software components the RTE Generation
Phase 3.4.2 is applicable where the Basic Software Scheduler part of the RTE is gen-
erated as well.
The actual AUTOSAR software-components and Basic-SW modules code will be linked
together with the RTE and Basic Software Scheduler code to build the entire ECU
software.
Please note that in case of implemented PreCompileTime variability addition-
ally the PreBuild Data Set Generation Phase is required (see section 3.5) to be able to
compile the ECU software. Further on in case of implemented post-build vari-
ability PostBuild Data Set Generation Phase is required (see section 3.6) to be able
to link the full ECU software.
The RTE Generator in the Generation Phase is also responsible to generate additional
artifacts which contribute to the further build, deployment and calibration of the ECUs
software.
[SWS_Rte_05086] d The RTE Generator in Generation Phase shall provide its Basic
Software Module Description in order to capture the generated RTEs attributes. c
(SRS_Rte_00170, SRS_Rte_00192, SRS_Rte_00233)
Details about the Basic Software Module Description generation can can be found in
section 3.4.3.
[SWS_Rte_05087] d The RTE Generator in Generation Phase shall provide an MC-
Support (Measurement and Calibration) description as part of the Basic Software Mod-
ule Description. c(SRS_Rte_00153, SRS_Rte_00189)
Details about the MC-Support can be found in section 4.2.8.4.
[SWS_Rte_05147] d The RTE Generator in Generation Phase shall provide the con-
figuration for the Ioc module [4] if the Ioc module is used. c(SRS_Rte_00196)
The RTE generates the IOC configurations and uses an implementation specific deter-
ministic generation scheme. This generation scheme can be used by implementations
to reuse these IOC configurations (e.g. if the configuration switch strictConfigu-
rationCheck is used).
[SWS_Rte_08400] d The RTE Generator in Generation Phase shall generate internal
ImplementationDataTypes types used for IOC configuration. c(SRS_Rte_00210)
The corresponding C data types will be generated into the Rte_Type.h.              This
Rte_Type.h header file will be used by the IOC to get the types for the IOC API.
Changing the RTE generator will require a new IOC configuration generation.
Details about the Ioc module can be found in section 4.3.4.1.
[SWS_Rte_08305] d The RTE Generator in Generation Phase shall ignore XML-
Content categorized as ICS. c(SRS_Rte_00233)
ARPackage with category ICS describes an Implementation Conformance Statement.
(See TPS Basic Software Module Description [9] for more details.)
The Basic Software Module Description [9] generated by the RTE Generator in gen-
eration phase describes features of the actual RTE code. The following requirements
specify which elements of the Basic Software Module Description are mandatory to be
generated by the RTE Generator.
for the Dlt needs the ImplementationDataType "TaskType" from the OS in order to
describe the data type of the SwServiceArg "task" in the description of the related
BswModuleEntry.
In this case the full qualified path name to the ImplementationDataType "Task-
Type" shall be
1 AUTOSAR_OS/ImplementationDataTypes/TaskType
The output of this phase are the RTE Post Build Variant Sets 5.3.10. This file is required
to link the ECU software and to select a particular PostBuild variant in the generated
RTE code during start up when the Basic Software Scheduler is initialized.
[SWS_Rte_06611] d If the DET is enabled then the RTE shall generate validation code
which at runtime (i.e. during initialization) validates the resolved post-build variants and
check the integrity with regards to the active variants. If a violation is detected the RTE
shall report a default error to the DET. To execute this validation RTE initialization will
get a pointer to the RtePostBuildVariantConfiguration instance to allow it to
validate the selected variant. c(SRS_Rte_00191)
[SWS_Rte_06612] d The RTE generator shall create an RTE Post Build Data Set con-
figuration (i.e. Rte_PBcfg.c) representing the collection of PredefinedVariant defi-
nitions (typically for each subsystem and/or system configuration) providing and defin-
ing the post build variants of the RTE. c(SRS_Rte_00191)
Note that the Rte_PBcfg.h is generated during the Rte Generation phase. An
Rte_PBcfg.c may also have to be generated at that time to reserve memory (with de-
fault values).
Additional details about these configuration files are described in section 5.3.10.
An RTE variant can consist of a collection of PredefinedVariants. Each Pre-
definedVariant contains a collection of PostBuildVariantCriterionValues
which assigns a value to a specific PostBuildVariantCriterion which in turn is
used to resolve the variability at runtime by evaluating a PostBuildVariantCon-
dition. Different PredefinedVariants could assign different values to the same
PostBuildVariantCriterion and as such create conflicts for a specific Post-
BuildVariantCriterionValueSet. It is allowed to have different assignments if
these assignment assign the same value.
[SWS_Rte_06613] d The RTE Generator shall reject configurations where dif-
ferent PredefinedVariants assign different values to the same PostBuild-
VariantCriterion for the same RtePostBuildVariantConfiguration. c
(SRS_Rte_00018, SRS_Rte_00191)
[SWS_Rte_06814] d The RTE Generator shall reject configurations where multiple
post build variant instances of ParameterDataPrototypes are used but where not
exactly one instance in one RtePostBuildVariantConfiguration is selected. c
(SRS_Rte_00018, SRS_Rte_00191)
Further information can be found in section 4.2.8.3.7.
used values are synchronized between the different BSW Modules configurations. AU-
TOSAR does not provide a standardized way how the individual configurations can be
synchronized, it is assumed that during the generation of the BSW Modules the input
information provided to the individual BSW Module is in sync with the input information
provided to other (dependent) BSW Modules.
The AUTOSAR BSW Module code-generation methodology is heavily relying on the
logical distinction between Configuration editors and configuration generators. These
tools do not necessarily have to be implemented as two separate tools, it just shall
be possible to distinguish the different roles the tools take during a certain step in the
methodology.
For the RTE it is assumed that tool support for the resolution of interactions between
the Rte and other BSW Modules is needed to allow an efficient configuration of the Rte.
It is however not specified how and in which tools this support shall be implemented.
The RTE Generator in Generation Phase needs information about other BSW Modules
configurations based on the configuration input of the Rte itself (there are references in
the configuration of the Rte which point to configuration values of other BSW Modules).
If during RTE Generation Phase the provided input information is inconsistent wrt. the
Rte input the Rte Generator will have to consider the input as invalid configuration.
[SWS_Rte_05149] d The RTE Generator in Generation Phase shall consider errors in
the Rte configuration input information as invalid configuration. c(SRS_Rte_00018)
Due to implementation freedom of the RTE Generator it is possible to correct / update
provided input configurations of other BSW Modules based on the RTE configuration
requirements. But to allow a stable build process it is also possible to disallow such an
update behavior.
[SWS_Rte_05150]          d      If     the    external configuration switch
strictConfigurationCheck is set to true the Rte Generator shall not create
or modify any configuration input. c(SRS_Rte_00065)
If    the    external     configuration    switch   strictConfigurationCheck
(see [SWS_Rte_05148]) is set to false the Rte Generator may update the input
configuration information of the Rte and other BSW Modules.
Example: If the Rte configuration is referencing an OsTask which is not configured in
the provided Os configuration, the RTE Generator would behave like:
    In case [SWS_Rte_05150] applies: Only show an error message.
    Otherwise: Possible behavior: Show a warning message and modify the Os con-
     figuration to contain the OsTask which is referred to by the Rte configuration (Of
     course the Os configuration of this new OsTask needs to be refined afterwards).
4.1.1 Scope
In this section the concept of an AUTOSAR software-component and its usage within
the RTE is introduced.
The AUTOSAR Software Component Template [2] defines the kinds of software-
components within the AUTOSAR context. These are shown in Figure 4.1. The ab-
stract SwComponentType can not be instantiated, so there can only be either a Com-
positionSwComponentType, a ParameterSwComponentType, or a specialized
class ApplicationSwComponentType, ServiceProxySwComponentType, Sen-
sorActuatorSwComponentType, NvBlockSwComponentType, ServiceSwCom-
ponentType, ComplexDeviceDriverSwComponentType, or EcuAbstraction-
SwComponentType of the abstract class AtomicSwComponentType.
In the following document the term AtomicSwComponentType is used as collective
term for all the mentioned non-abstract derived meta-classes.
The SwComponentType is defining the type of an AUTOSAR software-component
which is independent of any usage and can be potentially re-used several times in
different scenarios. In a composition the types are occurring in specific roles which are
called SwComponentPrototypes. The prototype is the utilization of a type within a
certain scenario. In AUTOSAR any SwComponentType can be used as a type for a
prototype.
                                                 ARElement                                                                      AtpPrototype
                                                AtpBlueprint                                                       SwComponentPrototype
                                            AtpBlueprintable +type
                                                    AtpType
                                                             1                   isOfType
                                      SwComponentType        {redefines
                                                             atpType}
                                                                                     atpVariation Tags:            +component     0..*
                                                                                     vh.latestBindingTime =
                                                                                     postBuild                          atpVariation,atpSplitable
The AUTOSAR software-components shown in Figure 4.1 are located above and below
the RTE in the architectural Figure 4.2.
Below the RTE there are also software entities that have an AUTOSAR Interface.
These are the AUTOSAR services, the ECU Abstraction and the Complex Device
Drivers. For these software not only the AUTOSAR Interface will be described but
also information about their internal structure will be available in the Basic Software
Module Description.
In the next sections the different AUTOSAR software-components kinds will be de-
scribed in detail with respect to their influence on the RTE.
    implementation
which will be addressed separately in the following sections.
[SWS_Rte_07196] d The RTE Generator shall respect the precedence of data prop-
erties defined via SwDataDefProps as defined in the Software Component Template
[2]. c()
Requirement [SWS_Rte_07196] means that:
  1. SwDataDefProps defined on ApplicationDataType which may be overwrit-
     ten by
  2. SwDataDefProps defined on ImplementationDataType which may be over-
     written by
  3. SwDataDefProps defined on AutosarDataPrototype which may be over-
     written by
  4. SwDataDefProps defined on InstantiationDataDefProps which may be
     overwritten by
  5. SwDataDefProps defined on AccessPoint respectively Argument which may
     be overwritten by
  6. SwDataDefProps defined on FlatInstanceDescriptor which may be over-
     written by
  7. SwDataDefProps defined on McDataInstance
The SwDataDefProps defined on McDataInstance are not relevant for the RTE
generation but rather the documentation of the generated RTE.
Especially the attributes swAddrMethod, swCalibrationAccess, swImplPolicy
and dataConstr do have an impact on the generated RTE. In the following document
only the attribute names are mentioned with the semantic that this refers to the most
significant one.
                                          atpVariation Tags:
                                          vh.latestBindingTime =
                                          preCompileTime
AbstractRequiredPortPrototype AbstractProvidedPortPrototype
                       +   isService :Boolean
                       +   serviceKind :ServiceProviderEnum [0..1]
When compositions are built of instances the ports can be connected either within the
composition or made accessible to the outside of the composition. For the connections
inside a composition the AssemblySwConnector is used, while the Delegation-
SwConnector is used to connect ports from the inside of a composition to the outside.
Ports not connected will be handled according to the requirement [SRS_Rte_00139].
The next step is to map the SW-C instances on ECUs and to establish the communi-
cation relationships. From this step the actual communication is derived, so it is now
+perInstanceParameter * +sharedParameter *
                                       +staticMemory
               AutosarDataPrototype
                                                                                                                          SwcInternalBehavior
             VariableDataPrototype     0..*      atpVariation,atpSplitable
+implicitInterRunnableVariable
* atpVariation,atpSplitable
+explicitInterRunnableVariable
* atpVariation,atpSplitable
+arTypedPerInstanceMemory
* atpVariation,atpSplitable
                                                                                                                        atpVariation Tags:
                                                                                                                        vh.latestBindingTime =
                                        atpVariation Tags:                                                            preCompileTime
                                                                               atpVariation,atpSplitable
                                        vh.latestBindingTime =                                                                                            atpVariation,atpSplitable
                                        preCompileTime                                            atpVariation,atpSplitable
                                                                                                                                     atpVariation,atpSplitable
RunnableEntitys (also abbreviated simply as Runnable) are the smallest code frag-
ments that are provided by AUTOSAR software-components and those basic software
modules that implement AUTOSAR Interfaces. They are represented by the meta-
class RunnableEntity, see Figure 4.5.
                                                                                                                InternalBehavior
                                          SwcInternalBehavior::SwcInternalBehavior
+   handleTerminationAndRestart :HandleTerminationAndRestartEnum
+   supportsMultipleInstantiation :Boolean
                          AtpStructureElement
                             ExecutableEntity                                              +event *
        SwcInternalBehavior::RunnableEntity                                                                   AbstractEvent
                                                +startOnEvent                                           AtpStructureElement
    +   canBeInvokedConcurrently :Boolean
                                                                                       RTEEvents::RTEEvent
    +   symbol :CIdentifier                     0..1
+trigger 1
                                                                                                                Identifiable
                                                                +waitPoint             RTEEvents::WaitPoint
                                                                         * +   timeout :TimeValue
Figure 4.5: Software-component runnable entity, wait points and RTE Events
+    handleTerminationAndRestart :HandleTerminationAndRestartEnum
+    supportsMultipleInstantiation :Boolean
                                                                                                                             AbstractAccessPoint
                                                                                   +dataSendPoint                            AtpStructureElement
                                                          atpVariation,atpSplitable          0..*                                   Identifiable
                                                                                                             DataElements::VariableAccess
                                                                     +dataReceivePointByArgument
                                                                                                      +   scope :VariableAccessScopeEnum [0..1]
                                                          atpVariation,atpSplitable          0..*
+dataReceivePointByValue
atpVariation,atpSplitable 0..*
+dataReadAccess
atpVariation,atpSplitable 0..*
+dataWriteAccess
atpVariation,atpSplitable 0..*
+readLocalVariable
atpVariation 0..*
+writtenLocalVariable
atpVariation 0..*
                                             atpVariation Tags:
                                             vh.latestBindingTime =
                                             preCompileTime
                                                        InternalBehavior
               SwcInternalBehavior::SwcInternalBehavior
+    handleTerminationAndRestart :HandleTerminationAndRestartEnum
+    supportsMultipleInstantiation :Boolean
                                                                                                                 AbstractAccessPoint
                                                +asynchronousServerCallResultPoint                               AtpStructureElement
                                                  atpVariation,atpSplitable                                             Identifiable
                                            +runnable                           0..* ServerCall::AsynchronousServerCallResultPoint
                                                atpVariation Tags:
                                                vh.latestBindingTime =
                                                preCompileTime
                                                                                               Trigger::ExternalTriggeringPoint
                                                            +externalTriggeringPoint
atpVariation,atpSplitable 0..*
                                                                                                                 AbstractAccessPoint
                                                            +internalTriggeringPoint                             AtpStructureElement
                                                                                                                          Identifiable
                                                  atpVariation,atpSplitable   0..*           Trigger::InternalTriggeringPoint
                                                 atpVariation Tags:
                                                 vh.latestBindingTime =
                                                 preCompileTime
                                                                                                                 AbstractAccessPoint
                                            +runnable             +modeSwitchPoint                               AtpStructureElement
                                                                                                                          Identifiable
                                                  atpVariation,atpSplitable      *       ModeDeclarationGroup::ModeSwitchPoint
                                                                                           ModeDeclarationGroup::ModeAccessPoint
                                                                  +modeAccessPoint
atpVariation,atpSplitable *
                                                atpVariation Tags:
                                                vh.latestBindingTime =
                                                preCompileTime
Figure 4.7: Software-component runnable entity and server invocation, trigger, and
mode switches
With the information from SwcInternalBehavior a part of the setup of the AU-
TOSAR software-component within the RTE and the OS can already be configured.
Furthermore, the information (description) of the structure (ports, interfaces) and the
internal behavior of an AUTOSAR software component are sufficient for the RTE Con-
tract Phase.
However, some detailed information is still missing and this is part of the Implementa-
tion description.
4.1.3.4 Implementation
atpSplitable
+resourceConsumption 1
                                                                                                                                   Identifiable
                                                                                        ResourceConsumption
                                             atpVariation,atpSplitable
                                                                                      atpVariation Tags:
          Identifiable                       +stackUsage 0..*                         vh.latestBindingTime
                                                                                      = preCompileTime
  ExecutableEntity                                        Identifiable                                                      atpVariation,atpSplitable
                         +executableEntity
                                                 StackUsage
                         0..1                                       A
                                                                                                   atpVariation,atpSplitable
atpVariation,atpSplitable
+executionTime 0..*
                                                                              Identifiable
                         +executableEntity
                                                                    ExecutionTime
                          0..1                                                                 +memorySection       0..*    +heapUsage 0..*
                                                                                                             Identifiable           Identifiable
                         +executableEntity                                                         MemorySection                HeapUsage
0..*
Note that the information from the Implementation part are only required for the RTE
Generation Phase, if at all.
4.1.4 Instantiation
Generally spoken, the term instantiation refers to the process of deriving specific in-
stances from a model or template. But, this process can be accomplished on different
levels of abstraction. Therefore, the instance of the one level can be the model for the
next.
With respect to AUTOSAR four modeling levels are distinguished. They are referred to
as the levels M 3 to M 0.
The level M 3 describes the concepts used to derive an AUTOSAR meta model of level
M 2. This meta model at level M 2 defines a language in order to be able to describe
specific attributes of a model at level M 1, e.g., to be able to describe an specific type
of an AUTOSAR software component. E.g., one part of the AUTOSAR meta model is
called Software Component Template or SW-C-T for short and specified in [2]. It is
discussed more detailed in section 4.1.3.
At level M 1 engineers will use the defined language in order to design components or
interfaces or compositions, say to describe an specific type of a LightManager. Hereby,
e.g., the descriptions of the (atomic) software components will also contain an internal
behavior as well as an implementation part as mentioned in section 4.1.3.
Those descriptions are input for the RTE Generator in the so-called Contract Phase
(see section 3.1.1). Out of this information specific APIs (in a programming language)
to access ports and interfaces will be generated.
Software components generally consist of a set of Runnable Entities. They can now
specifically be described in a programming language which can be refered to as im-
plementation. As one can see in section 4.1.3 this implementation then corresponds
exactly to one implementation description as well as to one internal behavior descrip-
tion.
M 0 refers to a specific running instance on a specific car.
Objects derived from those specified component types can only be executed in a spe-
cific run time environment (on a specific target). The objects embody the real and
running implementation and shall therefore be referred to as software component in-
stances (on modeling level M 0). E.g., there could be two component instances derived
from the same component type LightManager on a specific light controller ECU each
responsible for different lights. Making instances means that it should be possible to
distinguish them even though the objects are descended from the same model.
With respect to this more narrative description the RTE as the run time environment
shall enable the process of instantiation. Thereby the term instantiation throughout
the document shall refer to the process of deriving and providing explicit particular
descriptions of all occuring instances of all types. Therefore, this section will address
the problems which can arise out of the instantiation process and will specify the needs
for AUTOSAR components and the AUTOSAR RTE respectively.
Example 4.1
Since the single instance of the software component is unambigous per se no addi-
tional concepts have to be added.
Example 4.2
Runnable entity R1 called for two instances out of the same task context:
   1         TASK(Task1){
   2             ...
   3             R1(instance1);
   4             R1(instance2);
   5             ...
   6         }
In general, side effects can appear if the same code entity is invoked by different
threads of execution running, namely tasks. This holds particularly true, if the invoked
code entity inherits a state or memory by the means of static variables which are vis-
ible to all instances. That would mean that all instances are coupled by those static
variables.
Thus, they affect each other. This would lead to data consistency problems on one
hand. On the other  and that is even more important  it would introduce a new
communication mechanism to AUTOSAR and this is forbidden. AUTOSAR software
components can only communicate via ports.
To be complete, it shall be noted that a calling code entity also inherits the reentrancy
problems of its callee. This holds especially true in case of recursive calls.
An AUTOSAR SW-C can define internal memory only accessible by a SW-C instance
itself. This concept is called PerInstanceMemory. The memory can only be accessed
by the runnable entities of this particular instance. That means in turn, other instances
dont have the possibility to access this memory.
PerInstanceMemory API principles are explained in Section 5.2.5.
The API for PerInstanceMemory is specified in Section 5.6.15.
According to the AUTOSAR glossary [11] an AUTOSAR service is a logical entity of the
Basic Software offering general functionality to be used by various AUTOSAR software
components. The functionality is accessed via standardized AUTOSAR interfaces.
Therefore, AUTOSAR services provide standardized AUTOSAR Interfaces: ports
typed by standardized PortInterfaces.
When connecting AUTOSAR service ports to ports of AUTOSAR software components
the RTE maps standard RTE API calls to the symbols defined in the RTE input (i.e.
XML) for the AUTOSAR service runnables of the BSW. The key technique to distin-
guish ECU dependent identifiers for the AUTOSAR services is called port-defined
argument values, which is described in Section 4.3.2.4. Currently port-defined argu-
ment values are only supported for client-server communication. It is not possible to
use a pre-defined symbol for sending or receiving data.
The RTE does not pass an instance handle to the C-based API of AUTOSAR services
since the latter are single-instantiatable (see [SWS_Rte_03806]).
As displayed on figure 4.2, there can be direct interactions between the RTE and some
Basic Software Modules. This is the case of the Operating System, the AUTOSAR
Communication, and the NVRAM Manager.
The ECU Abstraction provides an interface to physical values for AUTOSAR software
components. It abstracts the physical origin of signals (their pathes to the ECU hard-
ware ports) and normalizes the signals with respect to their physical appearance (like
specific values of current or voltage).
See the AUTOSAR ECU architecture in figure 4.2. From an architectural point of view
the ECU Abstraction is part of the Basic Software layer and offers AUTOSAR interfaces
to AUTOSAR software components.
Seen from the perspective of an RTE, regular AUTOSAR ports are connected. With-
out any restrictions all communication paradigms specified by the AUTOSAR Virtual
Functional Bus (VFB) shall be applicable to the ports, interfaces and connections 
sender-receiver just as well as client-server mechanisms.
However, ports of the ECU Abstraction shall always only be connected to ports of
specific AUTOSAR software components: sensor or actuator software components. In
this sense they are tightly coupled to a particular ECU Abstraction.
Furthermore, it must not be possible (by an RTE) to connect AUTOSAR ports of the
ECU Abstraction to AUTOSAR ports of any AUTOSAR component located on a remote
ECU (see [SWS_Rte_02051].
This means, e.g., that sensor-related signals coming from the ECU Abstraction are
always received by an AUTOSAR sensor component located on the same ECU. The
AUTOSAR sensor component will then process the received signal and deploy it to
other AUTOSAR components regardless of whether they are located on the same or
any remote ECU. This applies to actuator-related signals accordingly, however, the
opposite way around.
[SWS_Rte_02050] d The RTE Generator shall generate a communication path be-
tween connected ports of AUTOSAR sensor or actuator software components and the
ECU Abstraction in the exact same manner like for connected ports of AUTOSAR soft-
ware components. c()
[SWS_Rte_02051] d The RTE Generator shall reject configurations which require a
communication path from a AUTOSAR software component to an ECU Abstraction
located on a remote ECU. c(SRS_Rte_00062, SRS_Rte_00018)
Further information about the ECU Abstraction can be found in the corresponding
specification document [17].
A Complex Device Driver has an AUTOSAR Interface, therefore the RTE can deal with
the communication on the Complex Device Drivers ports. The Complex Device Driver
is allowed to have code entities that are not under control of the RTE but yet still may
use the RTE API (e.g. ISR2, BSW main processing functions).
The interface of a Basic Software Module is described with Basic Software Module
Entries (BswModuleEntry ). For the functionality of the Basic Software Scheduler only
BswModuleEntry s from BswCallType SCHEDULED are relevant. Nevertheless for op-
timization purpose the analysis of the full call tree might be required which requires the
consideration of all BswModuleEntry s
The Basic Software Internal Behavior specifies the behavior of a BSW module or a
BSW cluster w.r.t. the code entities visible by the BSW Scheduler. For the Basic Soft-
ware Scheduler mainly Basic Software Schedulable Entities (BswSchedulableEntity s)
are relevant. These are Basic Software Module Entities, which are designed for control
by the Basic Software Scheduler. Basic Software Schedulable Entities are implement-
ing main processing functions. Furthermore all Basic Software Schedulable Entities
are allowed to use exclusive areas and for call tree analysis all Basic Software Module
Entities are relevant.
[SWS_Rte_07514] d The Basic Software Scheduler shall support multiple Basic Soft-
ware Module Entities in AUTOSAR Basic Software Modules. c(SRS_Rte_00211,
SRS_Rte_00213, SRS_Rte_00216)
[SWS_Rte_07515] d The Basic Software Scheduler shall trigger the execution of
Schedulable Entity s in accordance with the connected BswEvent. c(SRS_Rte_00072)
[SWS_Rte_07516] d The RTE Generator shall reject configurations where an Bsw-
Event which can start a Schedulable Entity is not mapped to an OS task. The excep-
tions are BswEvent that are implemented by a direct function call. c(SRS_Rte_00049,
SRS_Rte_00018)
[SWS_Rte_07517] d The RTE Generator shall respect the configured execution order
of Schedulable Entities within one OS task. c(SRS_Rte_00219)
The implementation defines further details of the implantation of the Basic Software
Module. The vendorApiInfix attribute is of particular interest, because it defines the
name space extension for multiple instances of the same basic software module. Fur-
ther on the category of the codeDescriptor specifies if the Basic Software Module
is delivered as source code or as object.
AUTOSAR Services, ECU Abstraction and Complex Device Drivers are hybrid of AU-
TOSAR software-component and Basic Software Module. These kinds of modules
might use AUTOSAR Interfaces to communicate via RTE as well as C-API to directly
access other Basic Software Modules. Caused by the structure of the AUTOSAR Meta
Model some entities of the C implementation have to be described twice; on the one
hand by the means of the Software Component Template [2] and on the other hand by
the means of the Basic Software Module Description Template [9]. Further on the du-
alism of port based communication between software component and non-port based
communication between Basic Software Modules requires in some cases the coordi-
nation and synchronization between both principles. The information about elements
belonging together is provided by the so called SwcBswMapping.
A Runnable Entity which is mapped to a Basic Software Module Entity has to be treated
as one common entity. This means it describes an entity which can use the features of
a Runnable Entity and a Basic Software Module Entity as well. For instance it supports
to use the port based API as well as Basic Software Scheduler API in one C function.
Two synchronized Trigger are behaving like one common Trigger. Consequently the
call of the belonging Rte_Trigger API and the SchM_Trigger API are having the
same effect. For optimization purpose the Rte_Trigger API might just refer to the
SchM_Trigger API.
4.2.1 Scope
Having a standardized interface means first that the modules do not provide or request
services for/of the AUTOSAR software components located above the RTE. They do
not have ports and therefore cannot be connected to the aforementioned AUTOSAR
software components. AUTOSAR OS as well as AUTOSAR COM are simply invisible
for them.
Secondly AUTOSAR OS and AUTOSAR COM are used by the RTE in order to achieve
the functionality requested by the AUTOSAR software components. The AUTOSAR
COM module is used by the RTE to route a signal over ECU boundaries, but this
mechanism is hidden to the sending as well as to the receiving AUTOSAR software
component. The AUTOSAR OS module is used for two main purposes. First, OS is
used by the RTE to route a signal over core and partition boundaries. Secondly, the
AUTOSAR OS module is used by the RTE in order to properly schedule the single
Runnables in the sense that the RTE Generator generates Task-bodies which contain
then the calls to appropriate Runnables.
In this sense the RTE shall also use the available means to convert interrupts to notifi-
cations in a task context or to guarantee data consistency.
With respect to this view, the RTE is thirdly not a generic abstraction layer for AU-
TOSAR OS and AUTOSAR COM. It is generated for a specific ECU and offers the
same interface to the AUTOSAR Software Components as the VFB. It implements the
functionality of the VFB using modules of the Basic Software, including a specific im-
plementation of AUTOSAR OS and AUTOSAR COM.
The Basic Software Scheduler offers services to integrate Basic Software Modules for
all modules of all layers. Hence, the Basic Software Scheduler provides the following
functions:
    embed Basic Software Modules implementations into the AUTOSAR OS context
    trigger BswSchedulableEntitys of the Basic Software Modules
    apply data consistency mechanisms for the Basic Software Modules
The integrators task is to apply given means (of the AUTOSAR OS) in order to assem-
ble BSW modules in a well-defined and efficient manner in a project specific context.
This also means that the BSW Scheduler only uses the AUTOSAR OS. It is not in the
least a competing entity for the AUTOSAR OS scheduler.
[SWS_Rte_02250] d The RTE shall only use the AUTOSAR OS, AUTOSAR COM, AU-
TOSAR Efficient COM for Large Data, AUTOSAR Transformer and AUTOSAR NVRAM
Manager in order to provide the RTE functionality to the AUTOSAR components. c
(SRS_Rte_00020)
[SWS_Rte_07519] d The Basic Software Scheduler shall only use the AUTOSAR OS
in order to provide the Basic Software Scheduler functionality to the Basic Software
Modules. c()
[SWS_Rte_06200] d The RTE Generator shall construct task bodies for those tasks
which contain RunnableEntitys. c(SRS_Rte_00049)
[SWS_Rte_06201] d The RTE Generator shall construct task bodies for those tasks
which contain Basic Software Schedulable Entities. c(SRS_Rte_00049)
The information for the construction of task bodies has to be given by the ECU Con-
figuration description. The mapping of Runnable Entities to tasks is given as an input
by the ECU Configuration description. The RTE Generator does not decide on the
mapping of RunnableEntitys to tasks.
[SWS_Rte_02254] d The RTE Generator shall reject configurations where input infor-
mation is missing regarding the mapping of BswEvents to OS tasks and RTEEvents
(which trigger runnables) to OS tasks. c(SRS_Rte_00049, SRS_Rte_00018)
Note: Not in all cases an event to task mapping is required. For example runnables
which shall be called via direct function call need no event to task mapping.
[SWS_Rte_08417] d The RTE Generator shall reject configurations where input in-
formation is missing regarding the construction of tasks bodies. c(SRS_Rte_00049,
SRS_Rte_00018)
4.2.2 OS
This section describes the interaction between the RTE + Basic Software Scheduler
and the AUTOSAR OS. The interaction is realized via the standardized interface of the
OS - the AUTOSAR OS API. See Figure 4.9.
The OS is statically configured by the ECU Configuration. The RTE generator however
may be allowed to create tasks and other OS objects, which are necessary for the run-
time environment (see [SWS_Rte_05150]). The mapping of RunnableEntitys and
BSW Schedulable Entities to OS tasks is not the job of the RTE generator. This map-
ping has to be done in a configuration step before, in the RTE-Configuration phase. The
RTE generator is responsible for the generation of OS task bodies, which contain the
calls for the RunnableEntitys and BSW Schedulable Entities. The RunnableEn-
titys and BSW Schedulable Entities themselves are OS independent and are not
allowed to use OS service calls. The RTE and Basic Software Scheduler have to en-
capsulate such calls via the standardized RTE API respectively Basic Software Sched-
uler API.
4.2.2.1 OS Objects
Tasks
    The RTE generator has to create the task bodies, which contain the calls of the
     RunnableEntitys and BswSchedulableEntitys. Note that the term task
     body is used here to describe a piece of code, while the term task describes a
     configuration object of the OS.
    The RTE and Basic Software Scheduler controls the task activation/resumption
     either directly by calling OS services like SetEvent() or ActivateTask() or
     indirectly by initializing OS alarms or starting Schedule-Tables for time-based ac-
     tivation of RunnableEntitys. If the task terminates, the generated taskbody
     also contains the calls of TerminateTask() or ChainTask().
    The RTE generator does not create tasks. The mapping of RunnableEntitys
     and BswSchedulableEntitys to tasks is the input to the RTE generator and
     is therefore part of the RTE Configuration.
    The RTE configurator has to allocate the necessary tasks in the OS configuration.
OS applications
    AUTOSAR OS has in R4.0 a new feature called Inter-OS-Application Commu-
     nication (IOC). IOC is generated by the OS based on the configuration partially
     generated by the RTE. The appropriate objects (OS-Applications) are generated
     by the OS, and are used by RTE to for task/runnable mapping.
Events
    The RTE and Basic Software Scheduler may use OS Events for the implementa-
     tion of the abstract RTEEvents and BswEvents.
    The RTE and Basic Software Scheduler therefore may call the OS service func-
     tions SetEvent(), WaitEvent(), GetEvent() and ClearEvent().
    The used OS Events are part of the input information of the RTE generator.
    The RTE configurator has to allocate the necessary events in the OS configura-
     tion.
Resources
    The RTE and Basic Software Scheduler may use OS Resources (standard or
     internal) e.g. to implement data consistency mechanisms.
    The RTE and Basic Software Scheduler may call the OS services GetRe-
     source() and ReleaseResource().
    The used Resources are part of the input information of the RTE generator.
    The RTE configurator has to allocate the necessary resources (all types of re-
     sources) in the OS configuration.
Interrupt Processing
    An alternative mechanism to get consistent data access is disabling/enabling of
     interrupts. The AUTOSAR OS provides different service functions to handle in-
     terrupt enabling/disabling. The RTE may use these functions and must not use
     compiler/processor dependent functions for the same purpose.
Alarms
    The RTE may use Alarms for timeout monitoring of asynchronous client/server
     calls. The RTE is responsible for Timeout handling.
    The RTE and Basic Software Scheduler may setup cyclic alarms for periodic trig-
     gering of RunnableEntitys and BswSchedulableEntitys (RunnableEn-
     tity activation via RTEEvent TimingEvent respectively BswSchedula-
     bleEntity activation via BswEvent BswTimingEvent )
    The RTE and Basic Software Scheduler therefore may call the OS service func-
     tions GetAlarmBase(), GetAlarm(), SetRelAlarm(), SetAbsAlarm()
     and CancelAlarm().
    The used Alarms are part of the input information of the RTE generator.
    The RTE configurator has to allocate the necessary alarms in the OS configura-
     tion.
Schedule Tables
    The RTE and Basic Software Scheduler may setup schedule tables for cyclic task
     activation (e.g. RunnableEntity activation via RTEEvent TimingEvent)
    The used schedule tables are part of the input information of the RTE generator.
    The RTE configurator has to allocate the necessary schedule tables in the OS
     configuration.
Common OS features
Depending on the global scheduling strategy of the OS, the RTE can make decisions
about the necessary data consistency mechanisms. E.g. in an ECU, where all tasks
are non-preemptive - and as the result also the global scheduling strategy of the com-
plete ECU is non-preemptive - the RTE may optimize the generated code regarding
the mechanisms for data consistency.
Hook functions
The AUTOSAR OS Specification defines hook functions as follows:
A Hook function is implemented by the user and invoked by the operating system in
the case of certain incidents. In order to react to these on system or application level,
there are two kinds of hook functions.
    application-specific: Hook functions within the scope of an individual OS Appli-
     cation.
    system-specific: Hook functions within the scope of the complete ECU (in gen-
     eral provided by the integrator).
If no memory protection is used (scalability classes SCC1 and SCC2) only the system-
specific hook functions are available.
In the SRS the requirements to implement the system-specific hook functions were
rejected [RTE00001], [RTE00101], [RTE00102] and [RTE00105], as well as the
application-specific hook functions [RTE00198]. The reason for the rejection is the
system (ECU) global scope of those functions. The RTE is not the only user of those
functions. Other BSW modules might have requirements to use hook functions as well.
This is the reason why the RTE is not able to generate these functions without the
necessary information of the BSW configuration.
It is intended that the implementation of the hook functions is done by the system
integrator and NOT by the RTE generator.
The following section describes the RunnableEntitys, their categories and their
task-mapping aspects. The prototypes of the functions implementing RunnableEn-
titys are described in section 5.7
Runnable Entities are the schedulable parts of SW-Cs. Runnable Entities are either
mapped to tasks or activated by direct function calls in the context of other Rte APIs,
for instance server runnables that are invoked via direct function calls.
The mapping must be described in the ECU Configuration Description. This configura-
tion - or just the RTE relevant parts of it - is the input of the RTE generator.
All RunnableEntitys are activated by the RTE as a result of an RTEEvent. Possi-
ble activation events are described in the meta-model by using RTEEvents (see sec-
tion 4.2.2.4).
If no RTEEvent specifies a particular RunnableEntity in the role startOn-
Event then the RunnableEntity is never activated by the RTE. Please note that
a RunnableEntity may be mapped to a BswSchedulableEntity as described in
section 4.2.2.2 which may lead to activations by the BSW Scheduler.
The categories of RunnableEntitys are described in [2].
RunnableEntitys and BswSchedulableEntitys are generalized by Exe-
cutableEntitys.
      MSA           ModeSwitchedAckEvent
      MME           SwcModeManagerErrorEvent
      ETO           ExternalTriggerOccurredEvent
      ITO           InternalTriggerOccurredEvent
      I             InitEvent
      THE           TransformerHardErrorEvent
The table 4.2 shows, that activation of RunnableEntity is possible for each kind of
RTEEvent. For RunnableEntity activation, no explicit RTE API in the to be activated
RunnableEntity is necessary. The RTE itself is responsible for the activation of the
RunnableEntity depending on the configuration in the SW-C Description.
If the RunnableEntity contains a WaitPoint, it can be resolved by the assigned
RTEEvent(s). Entering the WaitPoint requires an explicit call of a RTE API function.
The RTE (together with the OS) has to implement the WaitPoint inside this RTE API.
The following list shows which RTE API function has to be called to set up Wait-
Points.
    DataReceivedEvent: Rte_Receive()
    DataSendCompletedEvent: Rte_Feedback()
    ModeSwitchedAckEvent: Rte_SwitchAck()
    AsynchronousServerCallReturnsEvent: Rte_Result()
[SWS_Rte_01292] d When a DataReceivedEvent references a RunnableEn-
tity and a required VariableDataPrototype and no WaitPoint references the
DataReceivedEvent, the RunnableEntity shall be activated when the data is re-
ceived. [SWS_Rte_01135]. c(SRS_Rte_00072)
Requirement [SWS_Rte_01292] merely affects when the runnable is activated 
an API call should still be created, according to requirement [SWS_Rte_01288],
[SWS_Rte_01289], and [SWS_Rte_07395] as appropriate, to actually read the data.
4.2.2.5 BswEvents
                              AbstractEvent                                                    ExecutableEntity
                BswBehavior::BswEvent             +startsOnEvent          BswBehavior::BswModuleEntity
                                  BswBehavior::                                        BswBehavior::
                             BswOperationInvokedEvent                                 BswCalledEntity
    BswBehavior::                                                                                                    BswBehavior::
  BswScheduleEvent                                                                                                BswSchedulableEntity
BswBehavior::BswTimingEvent
+ period :TimeValue
BswBehavior::BswBackgroundEvent
BswBehavior::BswExternalTriggerOccurredEvent
BswBehavior::BswInternalTriggerOccurredEvent
BswBehavior::BswModeSwitchEvent
+ activation :ModeActivationKind
BswBehavior::BswModeSwitchedAckEvent
BswBehavior::BswModeManagerErrorEvent
BswBehavior::BswDataReceivedEvent
                                                               BswBehavior::
                                                   BswAsynchronousServerCallReturnsEvent
One of the main requirements of the RTE generator is "Construction of task bod-
ies" [SRS_Rte_00049]. The necessary input information e.g. the mapping of
RunnableEntitys and BswSchedulableEntity to tasks must be provided by the
ECU configuration description.
The ECU configuration description (or an extract of it) is the input for the RTE Generator
(see Figure 3.4). It is also the purpose of this document to define the necessary input
information. Therefore the following scenarios may help to derive requirements for the
ECU Configuration Template as well as for the RTE-generator itself.
Note: The scenarios do not cover all possible combinations.
The RTE-Configurator uses parts of the ECU Configuration of other BSW Modules,
e.g. the mapping of RunnableEntitys to OsTasks. In this configuration process the
RTE-Configurator expects OS objects (e.g. Tasks, Events, Alarms...) which are used
in the generated RTE and Basic Software Scheduler.
Some figures for better understanding use the following conventions:
Note: The following examples are only showing RunnableEntitys. But taking the
categorization of BswSchedulableEntitys defined in section 4.2.2.2 into account,
the scenarios are applicable for BswSchedulableEntitys as well.
Note: The implementations described in this section are examples only and are pre-
sented for information only. The examples must not be viewed as specification of
implementation. The intention is to serve as examples of one possible implementation
and not as specification of the only permitted implementation.
The different properties of RunnableEntitys with respect to data access and termi-
nation have to be taken into account when discussing possible scenarios of mapping
RunnableEntitys to tasks.
    RunnableEntitys using VariableAccesses in the dataReadAccess or
     dataWriteAccess roles (implicit read and send) have to terminate.
    RunnableEntitys of category 1 can be mapped either to basic or extended
     tasks. (see next subsection).
    RunnableEntitys using at least one WaitPoint are of category 2.
    RunnableEntitys of category 2 that contain WaitPoints will be typically
     mapped to extended tasks.
    RunnableEntitys that contain a SynchronousServerCallPoint generally
     have to be mapped to extended tasks.
    RunnableEntitys that contain a SynchronousServerCallPoint can be
     mapped to basic tasks if no timeout monitoring is required and the server runn-
     able is on the same partition.
    RunnableEntitys that contain a SynchronousServerCallPoint can be
     mapped to basic tasks if the server runnable is invoked directly and is itself of
     category 1.
Note that the runnable to task mapping scenarios supported by a particular RTE im-
plementation might be restricted.
4.2.2.6.1.1 Scenario 1
execution order of the RunnableEntitys within the task is necessary. In case the
RunnableEntitys have different activation periods, the RTE has to provide the glue-
code to guarantee the correct call cycle of each RunnableEntity.
The ECU Configuration-Template has to provide the sequence of RunnableEntitys
mapped to the same task, see RtePositionInTask.
Figure 4.12 shows the possible mappings of RunnableEntitys into a basic task. If
and only if a sequence order is specified, more than one RunnableEntity can be
mapped into a basic task.
Extended Task
If more than one RunnableEntity is mapped to the same task and the special con-
dition (same activation period) does not fit, an extended task is used.
If an extended task is used, the entry points to the different RunnableEntitys might
be distinguished by evaluation of different OS events. In the scenario above, the differ-
ent activation periods may be provided by different OS alarms. The corresponding OS
events have to be handled inside the task body. Therefore the RTE-generator needs
for each task the number of assigned OS Events and their names.
The ECU Configuration has to provide the OS events assigned to the RTEEvents
triggering the RunnableEntitys that are mapped to an extended task, see RteUse-
dOsEventRef.
Figure 4.13 shows the possible mapping of the multiple RunnableEntitys of cate-
gory 1 into an Extended Task. Note: The Task does not terminate.
For both, basic tasks and extended tasks, the ECU Configuration must provide the
name of the task.
The ECU Configuration has to provide the name of the task, see OsTask.
The ECU Configuration has to provide the task type (BASIC or EXTENDED), which
can be determined from the presence or absence of OS Events associated with that
task, see OsTask.
4.2.2.6.1.2 Scenario 2
4.2.2.6.1.3 Scenario 3
4.2.2.6.1.4 Scenario 4
4.2.2.6.1.5 Scenario 5
4.2.2.6.1.6 Scenario 6
There are two RunnableEntitys implementing a client (category 2) and a server for
synchronous C/S communication and the timeout attribute of the ServerCallPoint
is greater than 0.
There are again two ways to invoke a server synchronously:
    Simple function call for intra-partition C/S communication if the canBeInvoked-
     Concurrently attribute of the server runnable is set and the server is of cat-
         egory 1. In that case the server runnable is executed in the same task context
         (same stack) as the client runnable that has invoked the server and no timeout
         monitoring is performed (see [SWS_Rte_03768]). In this case the client runnable
         can be mapped to a basic task.
        The server runnable is mapped to its own task. If the canBeInvokedConcur-
         rently attribute is not set, the server runnable must be mapped to a task.
         If the implementation of the timeout monitoring uses OS events, the task of the
         server runnable must have lower priority than the task of the client runnable and
         the client runnable must be mapped to an extended task. Furthermore, both
         tasks must be preemptable1 . This has to be checked by the RTE generator. The
         notification that a timeout occurred is then notified to the client runnable by using
         an OS Event. In order for the client runnable to immediately react to the timeout,
         a task switch to the client task must be possible when the timeout occurs.
4.2.2.6.1.7 Scenario 7
This section describes how the monitoring of RunnableEntity execution time can
be done.
The RTE doesnt directly support monitoring of RunnableEntitys execution time but
the AUTOSAR OS support for monitoring of OsTasks execution time can be used for
this purpose.
If execution time monitoring of a RunnableEntity is required a possible solution is
to map the RunnableEntity alone to an OsTask and to configure the OS to monitor
the execution time of the OsTask.
This solution can lead to dispatch to individual OsTasks RunnableEntitys that
should be initially mapped to the same OsTask because of for example:
   1
     Strictly speaking, this restriction is not necessary for the task to which the client runnable is mapped.
If OS events are used to implement the timeout monitoring and the notification that the server is finished,
the RTE API implementation generally uses the OS service WaitEvent, which is a point of reschedul-
ing.
Figure 4.16: Inter task activation and mapping of runnable to individual task for monitor-
ing purpose
This behavior of the RTE can be configured with the attributes RteVirtual-
lyMappedToTaskRef of the RteEventToTaskMapping. RteVirtuallyMapped-
ToTaskRef references the OsTask in which the execution order of the RunnableEn-
titys and/or the evaluation order of the RTEEvents are controlled. RteMapped-
ToTaskRef references the individual OsTasks to which the RunnableEntitys are
mapped for the purpose of monitoring.
[SWS_Rte_07800] d The RTE Generator shall respect the configured virtual runn-
able to task mapping (RteVirtuallyMappedToTaskRef) in the RTE configuration.
c(SRS_Rte_00193)
Of course this solution requires that the task priorities and scheduling properties are
well configured in the OS to allow immediate preemption by the OsTasks to which the
monitored RunnableEntitys are mapped. A possible solution is:
    Priority of the OsTask to which the RunnableEntity is mapped is higher than
     the priority of the OsTask to which the RunnableEntity is virtually mapped
     and
    the OsTask to which the RunnableEntity is virtually mapped have a full pre-
     emptive scheduling or
    the RTE call the OS service Schedule() just after activation of the OsTask to
     which the RunnableEntity is mapped
Example 1: Without OsEvent
Description of the example:
RunnableEntity RE1 is activated by TimingEvent 100ms T1.
RunnableEntity RE2 is activated by TimingEvent 100ms T2.
RunnableEntity RE3 is activated by TimingEvent 100ms T3.
Execution order of the RunnableEntitys shall be R1, R2 then R3.
RE2 shall be monitored.
Possible RTE configuration:
RE1/T1 is mapped to OsTask TaskA with RtePositionInTask equal to 1.
RE2/T2 is mapped to OsTask TaskB but virtually mapped to TaskA with RtePosi-
tionInTask equal to 2.
RE3/T3 is mapped to OsTask TaskA with RtePositionInTask equal to 3.
Possible RTE implementation:
RTE starts cyclic OsAlarm with 100ms period.
This OsAlarm is configured to activate TaskA.
Non preemptive scheduling is configured for Task A.
TaskB priority = TaskA priority + 1
   1   void TaskA(void)
   2   {
   3      RE1();
   4      ActivateTask(TaskB);
   5      Schedule();
   6      RE3();
   7      TerminateTask();
   8   }
   9
  10   void TaskB(void)
  11   {
  12      RE2();
  13      TerminateTask();
  14   }
  27   void TaskB(void)
  28   {
  29      RE1();
  30      TerminateTask();
  31   }
  32
  33   void TaskC(void)
  34   {
  35      RE2();
  36      TerminateTask();
  37   }
  38
  39   void TaskD(void)
  40   {
  41      RE3();
  42      TerminateTask();
  43   }
It is also possible to configure the RTE for the monitoring of group of runnable = moni-
toring of the sum of the runnable execution times.
Example 3: Monitoring of group of runnables
Description of the example:
RunnableEntity RE1 is activated by TimingEvent 100ms T1.
RunnableEntity RE2 is activated by TimingEvent 100ms T2.
RunnableEntity RE3 is activated by TimingEvent 100ms T3.
RunnableEntity RE4 is activated by DataReceivedEvent DR1.
RunnableEntity RE5 is activated by DataReceivedEvent DR2.
RunnableEntity RE6 is activated by DataReceivedEvent DR3.
RunnableEntity RE7 is activated by DataReceivedEvent DR4.
DataReceivedEvent DR2, DR3 and DR4 references the same dataElement. Eval-
uation order of the RTEEvents shall be T1, T2, T3, DR1, DR2, DR3 then DR4.
RE2 and RE3 shall be monitored as a group.
RE6 and RE7 shall be monitored as a group.
Possible RTE configuration:
RE1 is mapped to OsTask TaskA with a reference to OsEvent EvtA and RtePosi-
tionInTask equal to 1.
RE2 is mapped to OsTask TaskB but virtually mapped to TaskA with a reference to
OsEvent EvtA and RtePositionInTask equal to 2.
RE3 is mapped to OsTask TaskB but virtually mapped to TaskA with a reference to
OsEvent EvtA and RtePositionInTask equal to 3.
RE4 is mapped to OsTask TaskA with a reference to OsEvent EvtB and RtePosi-
tionInTask equal to 4.
RE5 is mapped to OsTask TaskA with a reference to OsEvent EvtC and RtePosi-
tionInTask equal to 5.
RE6 is mapped to OsTask TaskC but virtually mapped to TaskA with a reference to
OsEvent EvtC and RtePositionInTask equal to 6.
RE7 is mapped to OsTask TaskC but virtually mapped to TaskA with a reference to
OsEvent EvtC and RtePositionInTask equal to 7.
Possible RTE implementation:
RTE starts cyclic OsAlarm with 100ms period.
This OsAlarm is configured to set EvtA.
RTE set EvtB and EvtC according to the callbacks from COM.
Full preemptive scheduling is configured for Task A.
TaskB priority = TaskC priority = TaskA priority + 1
   1   void TaskA(void)
   2   {
   3      EventMaskType Event;
   4
   5      while(1)
   6      {
   7         WaitEvent(EvtA | EvtB | EvtC);
   8         GetEvent(TaskA, &Event);
   9         if (Event & EvtA)
  10           {
  11               ClearEvent(EvtA);
  12               RE1();
  13               ActivateTask(TaskB);
  14           }
  15           else if (Event & EvtB)
  16           {
  17              ClearEvent(EvtB);
  18              RE4();
  19           }
  20           else if (Event & EvtC)
  21           {
  22              ClearEvent(EvtC);
  23              RE5();
  24              ActivateTask(TaskC);
  25           }
  26       }
  27   }
  28
  29   void TaskB(void)
  30   {
  31      RE2();
  32      RE3();
  33      TerminateTask();
  34   }
  35
  36   void TaskC(void)
  37   {
  38      RE6();
  39      RE7():
  40      TerminateTask();
  41   }
-   activations: int = 0
continuously increasing timer
- debounceTimer: float = minimumStartInterval
started
                                                                                                     /debounceTimer =
                                                                                                     minimumStartInterval
                                                                                                                                       activate
                                                   terminate    suspended                                                 not          /activations =                                                                      enabled
                                                                                                                       activated       1
                                 running               [Activation in
                      wait                             state activated]                                 [ModeDisabling               [ModeDisabling                                                   exitsDisablingMode
                                                                                                        in state enabled]            in state disabled]
         waiting                                                                                                                                                                                                                 entersDisablingMode
                             preempt resume                                                                            disabled
                                                                                [activations == 0]
                                                                                                                          not
                release                                                                                                                                                [ModeDisabling in
                                                                                                                       activated                                                                                       disabled
                                preempted                       to be started                                                                                          state disabled]
                                                                                                                                                 debounce                                 disabled
                                                     start                                                                                       activation                              debounce
                                                                                                                 [activations > 0]                                     [ModeDisabling in activation
                                                                                                                                                                       state enabled]
                                corresponds to task state "ready"
                                                                                                                                                                      activate
                                                                                                                      disabled                                        /activations +=
                                                                                                                      activated                                       (activations <=
                                                                                                                                                                      queue length) 1:0
                                                                                                         [ModeDisabling              [ModeDisabling in
                                                                                                         in state enabled]           state disabled]
The pending activations are only counted for server runnables when RTE im-
plements a call serialization of their invocation. In all other cases, RTE does not
queue activations and the state machine for the activation of ExecutableEntity
execution-instances simplifies as shown in Figure 4.18.
sm state machine for an EcexutableEntity execution-instance w ith unqueued activ ation
                                                                                     constraints
   {queue length == 0}
                         started
                                                                                               /debounceT imer =
                                                                                               minimumStartInterval
                 release
                                   preempted                         to be started
                                                                                                                  activ ated
                                                                                           start
                                                        start                                                                       [debounceT imer >=
                                                                                           /debounceT imer = 0
                                                                                                                                    minimumStartInterval]
                                    corresponds to task state "ready"
 ExecutableEntity                    description
 execution-instance state
 ExecutableEntity      execution-
                              This super state describes the life time of the state machine.
 instance is schedulable      Only when RTE or the SchM that runs the ExecutableEntity
                              execution-instance is started in the corresponding partition, this
                              state machine is active.
 ExecutableEntity execution-instance Main states
 suspended                    The ExecutableEntity execution-instance is not started and
                              there is no pending request to start the ExecutableEntity
                              execution-instance.
 to be started                The ExecutableEntity execution-instance is activated but
                              not yet started. Entering the to be started state, usually im-
                              plies the activation of a task that starts the ExecutableEn-
                              tity execution-instance. The ExecutableEntity execution-
                              instance stays in the to be started state, when the task is already
                              running until the gluecode of the task actually calls the function
                              implementing the ExecutableEntity.
 running                      The function, implementing the ExecutableEntity code is be-
                              ing executed. The task that contains the ExecutableEntity
                              execution-instance is running.
 waiting                      A task containing the ExecutableEntity execution-instance is
                              waiting at a WaitPoint within the ExecutableEntity.
 preempted                    A task containing the ExecutableEntity execution-instance is
                              preempted from executing the function that implements the Ex-
                              ecutableEntity.
 started                      started is the super state of running, waiting and pre-
                              empted between start and termination of the ExecutableEn-
                              tity execution-instance.
 ExecutableEntity execution-instance Activation states
 not activated                No RTEEvent / BswEvent requires the activation of the Exe-
                              cutableEntity execution-instance.
 debounce activation          One or more RTEEvents with a startOnEvent relation to the
                              ExecutableEntity execution-instance have occurred 2 , but
                              the debounce timer has not yet exceeded the minimumStart-
                              Interval. The activation will automatically advance to acti-
                              vated, when the debounce timer reaches the minimumStart-
                              Interval.
 activated                    One or more RTEEvents or BswEvents with a startOnEvent
                              relation to the ExecutableEntity have occurred, and the
                              debounce timer has exceeded the minimumStartInterval.
                              While the activated state is active, the Main state of the Ex-
                              ecutableEntity execution-instance automatically advances
                              from the suspended to the to be started state.
                              For a server runnable where RTE implements a serialization
                              of server calls, an activation counter counts the number of acti-
                              vations.
                              When the ExecutableEntity execution-instance starts, the
                              activation counter will be decremented. When there is still a
                              pending activation, the Activation state will turn to debounce ac-
                              tivation and otherwise to no activation.
  2
   Note that, e.g., the same OperationInvokedEvent may lead to the activation of different Exe-
cutableEntity execution-instances, depending on the client that caused the event.
Note: For tasks, the equivalent state machine does not distinguish between preempted
and to be started. They are subsumed as ready.
 ExecutableEntity                      description of event and actions
 execution-instance            transi-
 tion
 initial    transition     to    Exe- RTE or the SchM that runs the ExecutableEntity execution-
 cutableEntity execution-instance instance is being started in the corresponding partition.
 is schedulable
 termination transition from Exe- RTE or the SchM that runs the ExecutableEntity execution-
 cutableEntity execution-instance instance gets stopped in the corresponding partition.
 is schedulable
 transitions to ExecutableEntity execution-instance Main states
 initial transition to suspended       the suspended state is the initial state of the ExecutableEn-
                                       tity execution-instance Main states.
 from started to suspended             The ExecutableEntity execution-instance has run to comple-
                                       tion.
 from suspended to to be This transition is automatically executed, while the Activation
 started                              state is activated.
 from to be started to running       The function implementing the ExecutableEntity is called
                                       from the context of this execution-instance.
 from preempted to running             A task that is preempted from executing the ExecutableEn-
                                       tity execution-instance changes state from preempted to run-
                                       ning.
 from running to waiting               The runnable enters a WaitPoint.
 from waiting to preempted             The task that contains a runnable waiting at a wait point changes
                                       from waiting to preempted.
 from running to preempted             A task containing the ExecutableEntity execution-instance
                                       gets preempted from executing the function that implements the
                                       ExecutableEntity.
 transitions to ExecutableEntity execution-instance Activation states
 initial transition to not activated The not activated state is the initial state of the ExecutableEn-
                                       tity execution-instance Activation states.
                                       The debounce timer is set to the minimumStartInterval
                                       value, to prevent a delay for the first activation of the Exe-
                                       cutableEntity execution-instance.
 from activated to not activated     The function implementing the ExecutableEntity is called
                                       from the context of this execution-instance and no further acti-
                                       vations are pending.
                                       The debounce timer is reset to 0.
 from not activated to debounce The occurrence of an RTEEvent or BswEvent requires the acti-
 activation                           vation of the ExecutableEntity execution-instance.
                                       A local activation counter is set to 1. If no minimumStartIn-
                                       terval is configured, or the debounce timer has already ex-
                                       ceeded the minimumStartInterval, the debounce activation
                                       state will be omitted and the transition leads directly to the acti-
                                       vated state.
 from activated to debounce ac-      The function implementing the ExecutableEntity is called
 tivation                            from the context of this execution-instance (start), and another
                                      activation is pending (only for server runnable).
                                      The activation counter is decremented and the debounce timer
                                      reset to 0.
                                      If no minimumStartInterval is configured, the debounce ac-
                                      tivation state will be omitted and the transition returns directly at
                                      the activated state.
 from debounce activation to        If RTE implements server call serialization for a server runn-
 debounce activation                able, and an OperationInvokedEvent occurs for the server
                                      runnable.
                                      The activation counter is incremented (at most to the queue
                                      length).
 from debounce activation to ac-    The            debounce           timer           is         expired,
 tivated                              debounce timer > minimumStartInterval.
 from activated to activated          If RTE implements server call serialization for a server runn-
                                      able, and an OperationInvokedEvent occurs for the server
                                      runnable.
                                      The activation counter is incremented (at most to the queue
                                      length).
Example 4.3
                                                               constraints
                         {queue length == 0}
                         {debounceTimer == 0}
                         {canBeInvocecConcurrentl y == true}
                         {runnable not mapped to task}
Main
started
terminate suspended
                                                       running
                                            wait
                                       release
                                                      preempted              activate
The runnables R1, R2 and R3 are mapped in the task T1 at 20 ms which is the GCD
of all runnables period and activation offset.
Example 2:
This example describes 4 runnables mapped in one task with an activation offset and
position in task defined for each runnables.
              Runnable           Period   Position in task   Activation Offset
              R1                  50ms           1                  0ms
              R2                 100ms           2                  0ms
              R3                 100ms           3                 70ms
              R4                  50ms           4                 20ms
The runnables R1, R2, R3 and R4 are mapped in the task T1 at 10 ms which is the
GCD of all runnables period and activation offset.
Figure 4.23: Example of activation offset for runnables with position in task
It is possible to define the activation of one runnable entity by several RTE events. But
when the runnable entity is invoked by the RTE it is shall be possible to query which of
the RTE events actually triggered the execution of this runnable entity run.
Contract Phase:
The provide activating event feature is enabled if the runnable entity has at least one
activationReason defined.
[SWS_Rte_08051] d If the provide activating event feature is enabled, the RTE gen-
erator in contract phase shall generate the runnable entity signature according to
[SWS_Rte_01126] and [SWS_Rte_08071]. c(SRS_Rte_00238)
[SWS_Rte_08052] d If the provide activating event feature is en-
abled, the RTE generator in contract phase shall generate the type
Rte_ActivatingEvent_<name> (activation vector), where <name> is
the symbol describing the runnable entitys entry point, to store the activation bits.
Based on the highest value of ExecutableEntityActivationReason.bitPosi-
tion for this runnable entity the type shall be either uint8, uint16, or uint32 so
that the highest value of bitPosition fits into the data type. c(SRS_Rte_00238)
Note that it is considered an invalid configuration if ExecutableEntityActiva-
tionReason.bitPosition has a value higher than 31 (see [constr_1226] in soft-
ware component template [2])
[SWS_Rte_08053] d If the provide activating RTE event feature is enabled, the RTE
generator in contract phase shall generate for each ExecutableEntityActiva-
tionReason of one executable entity a definition to provide the specific bit position in
the Rte_ActivatingEvent_<name> data type:
#define Rte_ActivatingEvent_<name>_<activation> xxU
The value of xx is defined by the bitPosition xx = 2 bitPosition. c(SRS_Rte_00238)
Example: runnable entity symbol = "greek" and has 3 ExecutableEntityActiva-
tionReasons aggregated. Those are referenced by 4 RTE events:
    RTEEvent: "alpha" symbol: aleph
    RTEEvent: "beta"        symbol: beth
    RTEEvent: "gamma" symbol: gimel
    RTEEvent: "delta" symbol: gimel
This will result in a unit8 Rte_ActivatingEvent_<name>                     data   type:
typedef uint8 Rte_ActivatingEvent_greek and 3 definitions:
    #define Rte_ActivatingEvent_greek_aleph                  01U
    #define Rte_ActivatingEvent_greek_beth                   02U
    #define Rte_ActivatingEvent_greek_gimel                  04U
Generation Phase:
[SWS_Rte_08054] d If the provide activating RTE event feature is enabled, the RTE
shall collect the activating RTE events, which have the activationReasonRep-
resentation reference defined, in the context of the OS task the runnable entity
is mapped to in an activation vector at the corresponding bit position as defined in
[SWS_Rte_08053]. c(SRS_Rte_00238)
[SWS_Rte_08055] d If the provide activating RTE event feature is enabled, the RTE
shall provide the collected activating RTE events (activation vector) to the runnable
entity API when the runnable entity is "started". The activation vector shall be reset
immediately after it has been provided. c(SRS_Rte_00238)
Since it is possible that there is a time gap between the activation and the execution
(start) of a runnable entity the subsequent activations are summed up and provided
with the start of the runnable entity.
Activations during the execution of a runnable entity are collected for the next start of
that runnable entity.
Several BSW modules exist which contain functionality which is not directly activated,
triggered or called by AUTOSAR software-components but by other circumstances, like
digital input port level changes, complex driver actions, CAN signal reception, etc. In
most cases interrupts are a result of those circumstances. For a definition of interrupts,
see the VFB [1].
Several of these BSW functionalities create situations, signalled by an interrupt, when
AUTOSAR SW-Cs have to be involved. To inform AUTOSAR software components of
those situations, runnables in AUTOSAR software components are activated by no-
tifications. So interrupts that occur in the basic software have to be transformed into
notifications of the AUTOSAR software components. Such a transformation has to take
place at RTE level at the latest! Which interrupt is connected to which notification is
decided either during system configuration/generation time or as part of the design of
Complex Device Drivers or the Microcontroller Abstraction Layer.
This means that runnables in AUTOSAR SW-Cs have to be activated or "waiting" cat2
runnables in extended tasks have to be set to "ready to run" again. In addition some
event specific data may have to be passed.
There are two different mechanisms to implement these notifications, depending on
the kind of BSW interfaces.
  1. BSW with Standardized interface. Used with COM and OS.
     Basic-SW modules with Standardized interfaces cannot create RTEEvents. So
     another mechanism must be chosen: "callbacks"
     The typical callback realization in a C/C++ environment is a function call.
  2. BSW with AUTOSAR interface: Used in all the other BSW modules.
     Basic-SW modules with AUTOSAR-Interfaces have their interface specified in an
      AUTOSAR BSW description XML file which contains signal specifications accord-
      ing to the AUTOSAR specification. The BSW modules can employ RTE API calls
      like Rte_Send  see 5.6.5). RTEEvents may be connected with the RTE API
      calls, so realizing AUTOSAR SW-C activation.
Note that an AUTOSAR software component can send a notification to another AU-
TOSAR software component or a BSW module only via an AUTOSAR interface.
4.2.4.2 Interrupts
The AUTOSAR concept as stated in the VFB specification [1] does not allow AUTOSAR
software components to run in interrupt context. Only the Microcontroller Abstraction
Layer, Complex Device Drivers and the OS are allowed to directly interact with inter-
rupts and implement interrupt service routines (see Requirement [SRS_BSW_00164].
This ensures hardware independence and determinism.
If AUTOSAR software components were allowed to run in interrupt context, one AU-
TOSAR software component could block the entire system schedule for an unaccept-
ably long period of time. But the main reason is that AUTOSAR software components
are supposed to be independent of the underlying hardware so that exchangeability
between ECUs can be ensured. The schedule of an ECU is more predictable and bet-
ter testable if the timing effects of interrupts are restricted to the basic software of that
ECU.
Furthermore, AUTOSAR software components are not allowed to explicitly block inter-
rupts as a means to ensure data consistency. They have to use RTE functions for this
purpose instead, see Section 4.2.5.
    Start a runnable
RTE job:
    RTE starts a task containing the runnable activation code by using the Acti-
     vateTask()" OS service call.
    Other more sophisticated solutions are possible, e.g. if the task containing the
     runnable is activated periodically.
Example 2:
Situation:
    An interrupt routine calls an RTE callback function
Intention:
Since category 1 interrupts are not under OS control the RTE has absolutely no pos-
sibility to influence their execution behavior. So no category 1 interrupt is allowed to
reach RTE. This is different for interrupt of category 2.
[SWS_Rte_03594] d The RTE Generator shall reject the configuration if a SwcB-
swRunnableMapping associates a BswInterruptEntity with a RunnableEn-
tity and the attribute interruptCategory of the BswInterruptEntity is equal
to cat 1. c(SRS_Rte_00018, SRS_Rte_00099)
[SWS_Rte_CONSTR_09012] Category 1 interrupts shall not access the RTE. d
Category 1 interrupts shall not access the RTE. c()
The RTE and Basic Software Scheduler do support the invocation triggered Exe-
cutableEntity via direct function call in some special cases. Nevertheless it shall
be prevented that an ExecutableEntity from a particular execution context calls
COM callbacks are used to inform the RTE about something that happened indepen-
dently of any RTE action. This is often interrupt driven, e.g. when a data item has been
received from another ECU or when a S/R transmission is completed.
It is the RTEs job e.g. to create RTEEvents from the interrupt.
[SWS_Rte_03530] d The RTE shall provide callback functions to allow COM to signal
COM events to the RTE. c(SRS_Rte_00072, SRS_Rte_00099)
[SWS_Rte_03531] d The RTE shall support runnable activation by COM callbacks. c
(SRS_Rte_00072, SRS_Rte_00099)
[SWS_Rte_03532] d The RTE shall support category 2 runnables to wake up from a
wait point as a result of COM callbacks. c(SRS_Rte_00072, SRS_Rte_00099)
See RTE callback API in chapter 5.9.
4.2.5.1 General
Concurrent accesses to shared data memory can cause data inconsistencies. In gen-
eral this must be taken into account when several code entities accessing the same
data memory are running in different contexts - in other words when systems using
parallel (multicore) or concurrent (singlecore) execution of code are designed. More
general: Whenever task context-switches occur and data is shared between tasks,
data consistency is an issue.
AUTOSAR systems use operating systems according to the AUTOSAR-OS specifica-
tion which is derived from the OSEK-OS specification. The Autosar OS specification
defines a priority based scheduling to allow event driven systems. This means that
tasks with higher priority levels are able to interrupt (preempt) tasks with lower priority
level.
The "lost update" example in Figure 4.24 illustrates the problem for concurrent read-
modify-write accesses:
                                           1) Get X=5
                                           2) X+=2
                                           3) X = X
Task A
Task B
Data X 5555555557777766666666
              Time
                 Figure 4.24: Data inconsistency example - lost update
There are two tasks. Task A has higher priority than task B. A increments the commonly
accessed counter X by 2, B increments X by 1. So in both tasks there is a read
(step1)  modify (step2)  write (step3) sequence. If there are no atomic accesses (fully
completed read-modify-write accesses without interruption) the following can happen:
  1. Assume X=5.
  2. B makes read (step1) access to X and stores value 5 in an intermediate store
     (e.g. on stack or in a CPU register).
  3. B cannot continue because it is preempted by A.
  4. A does its read (step1)  modify (step2)  write (step3) sequence, which means
     that A reads the actual value of X, which is 5, increments it by 2 and writes the
     new value for X, which is 7. (X=5+2)
  5. A is suspended again.
  6. B continues where it has been preempted: with its modify (step2) and write
     (step3) job. This means that it takes the value 5 form its internal store, incre-
     ments it by one to 6 and writes the value 6 to X (X=5+1).
  7. B is suspended again.
The correct result after both Tasks A and B are completed should be X=8, but the
update of X performed by task A has been lost.
In AUTOSAR systems the RTE has to take care that a lot of the communication is not
corrupted by data consistency problems. RTE Generator has to apply suitable means
if required.
The following communication mechanisms can be distinguished:
    Communication within one atomic AUTOSAR SW-C:
     Communication between Runnables of one atomic AUTOSAR SW-C running in
     different task contexts where communication between these Runnables takes
     place via commonly accessed data. If the need to support data consistency by
     the RTE exists, it must be specified by using the concepts of "ExclusiveAreas" or
     "InterRunnableVariables" only.
    Intra-partition communication between AUTOSAR SW-Cs:
     Sender/Receiver (S/R) communication between Runnables of different AU-
     TOSAR SW-Cs using implicit or explicit data exchange can be realized by the
     RTE through commonly accessed RAM memory areas. Data consistency in
     Client/Server (C/S) communication can be put down to the same concepts as
     S/R communication. Data access collisions must be avoided. The RTE is re-
     sponsible for guaranteeing data consistency.
    Inter-Partition communication
     The RTE has to guarantee data consistency. The different possibilities pro-
     vided to the RTE for the communication between partitions are discussed in sec-
     tion 4.3.4.
    Intra-ECU communication between AUTOSAR SW-Cs and BSW modules with
     AUTOSAR interfaces:
     This is a special case of the above two.
    Inter ECU communication
     COM has to guarantee data consistency for communication between ECUs on
     complete path between the COM modules of different ECUs. The RTE on each
     ECU has to guarantee that no data inconsistency might occur when it invokes
     COM send respectively receive calls supplying respectively receiving data items
     which are concurrently accessed by application via RTE API call, especially when
     queueing is used since the queues are provided by the RTE and not by COM.
[SWS_Rte_03514] d The RTE has to guarantee data consistency for communication
via AUTOSAR interfaces. c(SRS_Rte_00032)
4.2.5.3 Concepts
In the AUTOSAR SW-C Template [2] chapter "Interaction between runnables within
one component", the concepts of
  1. ExclusiveAreas (see section 4.2.5.5 below)
Additionally exclusive areas are also available for Basic Software Modules to protect
access to module internal data. See [9]. The exclusive areas for Basic Software Mod-
ules are handled by the Basic Software Scheduler.
The AUTOSAR SW-C template specification [2] also states that AUTOSAR SW-Cs may
define PerInstanceMemory or arTypedPerInstanceMemory, allowing reserva-
tion of static (permanent) need of global RAM for the SW-C. Nothing is specified about
the way Runnables might access this memory. RTE only provides a reference to this
memory (see section 5.6) but doesnt guarantee data consistency for it.
The implementer of an AUTOSAR SW-C has to take care by himself that accesses
to RAM reserved as PerInstanceMemory out of Runnables running in different task
contexts dont cause data inconsistencies. On the other hand this provides more
freedom in using the memory.
      because it might influence SW in tasks with higher priority too and the timing of
      the complete system.
    Usage of OS resources
     Usage of OS resources. Advantage in comparison to Interrupt blocking strat-
     egy is that less SW parts with higher priority are blocked. Disadvantage is that
     implementation might consume more resources (code, runtime) due to the more
     sophisticated mechanism. Appropriateness of this mechanism may vary depend-
     ing on the number of OSs/cores and/or the number of available resources.
    Task blocking strategy
     Mutual task preemption is prohibited. This might be reached e.g. by assigning
     same priorities to affected tasks, by assigning same internal OS resource to af-
     fected tasks or by configuring the tasks to be non-preemptive. This mechanism
     may be inappropriate in multi-partitioned systems.
    Copy strategy
     Idea: The RTE creates copies of data items so that concurrent accesses in dif-
     ferent task contexts cannot collide because some of the accesses are redirected
     to the copies.
      How it can work:
         Application for read conflicts:
          For all readers with lower priority than the writer a read copy is provided.
              Example:
              There exist Runnable R1, Runnable R2, data item X and a copy data
              item X*. When Runnable R1 is running in higher priority task context than
              R2, and R1 is the only one writing X and R2 is reading X it is possible to
              guarantee data consistency by making a copy of data item X to variable X*
              before activation of R2 and redirecting write access from X to X* or the read
              access from X to X* for R2.
      Usage of this copy mechanism may make sense if one or more of the following
      conditions hold:
           This copy mechanism can handle those cases when only one instance does
            the data write access.
           R2 is accessing X several times.
           More than one Runnable R2 has read (resp. write) access to X.
           To save runtime is more important than to save code and RAM.
           Additional RAM requirements to hold the copies is acceptable.
      Further issues to be taken into account:
           AUTOSAR SW-Cs provided as source code and AUTOSAR SW-Cs pro-
            vided as object code may or have to be handled in different ways. The
            redirecting mechanism for source code could use macros for C and C++
            very efficiently whereas object-code AUTOSAR SW-Cs most likely are
            forced to use references.
      Note that the copy strategy is used to guarantee data consistency for implicit
      sender-receiver communication (VariableAccesses in the dataReadAccess
      or dataWriteAccess role) and for AUTOSAR SW-C internal communication
      using InterRunnableVariables with implicit behavior.
The concept of ExclusiveArea is more a working model. Its not a concrete imple-
mentation approach, although concrete possible mechanisms are listed in AUTOSAR
SW-C template specification [2].
Focus of the ExclusiveArea concept is to block potential concurrent accesses
to get data consistency. ExclusiveAreas implement critical section
ExclusiveAreas are associated with RunnableEntitys. The RTE is forced to guar-
antee data consistency when the RunnableEntity runs in an ExclusiveArea. A
RunnableEntity can run inside one or several ExclusiveAreas completely or can
enter one or several ExclusiveAreas during their execution for one or several times
.
    If an AUTOSAR SW-C requests the RTE to look for data consistency for its inter-
     nally used data (for a part of it or the complete one) using the ExclusiveArea
     concept, the SW designer can use the API calls "Rte_Enter()" in 5.6.28 and
     "Rte_Exit()" in 5.6.29 to specify where he wants to have the protection by RTE
     applied.
     "Rte_Enter()" defines the begin and "Rte_Exit()" defines the end of the code se-
     quence containing data accesses the RTE has to guarantee data consistency
     for.
4.2.5.6 InterRunnableVariables
(also see section 4.3.3.1). Read and write accesses are possible. There is a separate
set of those variables per AUTOSAR SW-C instance.
Again the RTE has to guarantee data consistency. Appropriate means will depend on
Runnable placement decisions which are taken during ECU configuration.
[SWS_Rte_03516] d The RTE has to guarantee data consistency for communication
between Runnables of one AUTOSAR software-component instance using the same
InterRunnableVariable. c(SRS_Rte_00142, SRS_Rte_00032)
Next the two kinds of InterRunnableVariables are treated:
  1. InterRunnableVariables with implicit behavior
      (implicitInterRunnableVariable)
  2. InterRunnableVariables with explicit behavior
      (explicitInterRunnableVariable)
In applications with very high SW-C communication needs and much real time con-
straints (like in powertrain domain) the usage of a copy mechanism to get data con-
sistency might be a good choice because during RunnableEntity execution no data
consistency overhead in form of concurrent access blocking code and runtime during
its execution exists - independent of the number of data item accesses.
Costs are code overhead in the RunnableEntity prologue and epilogue which is
often be minimal compared to other solutions. Additional RAM need for the copies
comes in plus.
When InterRunnableVariables with implicit behavior are used the RTE is required to
make the data available to the Runnable using the semantics of a copy operation
but is not necessarily required to use a unique copy for each RunnableEntity.
Focus of InterRunnableVariable with implicit behavior is to avoid concurrent ac-
cesses by redirecting second, third, .. accesses to data item copies.
[SWS_Rte_03517] d The RTE shall guarantee data consistency for InterRunnableVari-
ables with implicit behavior by avoiding concurrent accesses to data items specified by
implicitInterRunnableVariable using one or more copies and redirecting ac-
cesses to the copies.
c(SRS_Rte_00142, SRS_Rte_00032)
Compared with Sender/Receiver communication
    Like with VariableAccesses in the dataReadAccess and dataWriteAc-
     cess roles, the Runnable IN data is stable during Runnable execution, which
     means that during an Runnable execution several read accesses to an implic-
     itInterRunnableVariable always deliver the same data item value.
In many applications saving RAM is more important than saving runtime. Also some
application require to have access to the newest data item value without any delay,
even several times during execution of a Runnable.
Both requirements can be fulfilled when RTE supports data consistency by blocking
second/third/.. concurrent accesses to a signal buffer if data consistency is jeopar-
dized. (Most likely RTE has nothing to do if SW is running on a 16bit machine and
making an access to an 16bit value when a 16bit data bus is present.)
4.2.6   Multiple trigger of Runnable Entities and Basic Software Schedulable En-
        tities
Concurrent activation
The AUTOSAR SW-C template specification [2] states that runnable entities (further
called "runnables") might be invoked concurrently several times if the Runnables at-
tribute canBeInvokedConcurrently is set. Its then in the responsibility of the AU-
TOSAR SW-C designer that no data might be corrupted when the Runnable is activated
several times in parallel.
If a SW-C has multiple instances, they have distinct runnables. Two runnables that
use the same RunnableEntity description of the same SwcInternalBehavior
description but are instantiated with two different SW-C instances are treated as two
distinct runnables in the following. This kind of concurrency is always allowed between
SW-Cs, even if the runnables have their canBeInvokedConcurrently attribute set
to false.
[SWS_Rte_03523] d The RTE shall support concurrent activation of the same instance
of a runnable entity if the associative attribute canBeInvokedConcurrently is set
to TRUE. This includes concurrent activation in several tasks. If the attribute is not
set resp. set to FALSE, concurrent activation of the runnable entity is forbidden. (see
requirement [SWS_Rte_05083]) c(SRS_Rte_00072, SRS_Rte_00133)
The Basic Software Module Description Template [9] specifies the possible concurrent
activation of BswModuleEntitys by the attribute isReentrant.
[SWS_Rte_07525] d The Basic Software Scheduler shall support concurrent activation
of the same instance of a BswSchedulableEntity if the attribute isReentrant of
the referenced BswModuleEntry in the role implementedEntry is set to true.
This includes concurrent activation in several tasks. If the attribute is set to false
concurrent activation of the BswSchedulableEntity is forbidden. (see requirement
[SWS_Rte_07588]) c()
Concurrent activation of the same instance of a ExecutableEntity results in mul-
tiple ExecutableEntity execution-instances. One for each context of activa-
tion.
Activation by several RTEEvents and BswEvents
Nevertheless a Runnable whose attribute canBeInvokedConcurrently is NOT set
might be still activated by several RTEEvents if activation configuration guarantees
that concurrent activation can never occur and the minimumStartInterval condi-
tion is kept. This includes activation in different tasks. In this case, the runnable is
still considered to have only one ExecutableEntity execution-instances. A
standard use case is the activation of same instance of a runnable in different modes.
[SWS_Rte_03520] d The RTE shall support activation of same instance of a runnable
entity by multiple RTEEvents. c(SRS_Rte_00072)
RTEEvents are triggering runnable activation and may supply 0..several role param-
eters, see section 5.7.3. Role parameters are not visible in the runnables signature -
except in those triggered by an OperationInvokedEvent. With the exception of the
RTEEvent OperationInvokedEvent all role parameters can be accessed by user
with implicit or explicit Receiver API.
[SWS_Rte_03524] d The RTE shall support activation of same instance of a runnable
entity by RTEEvents of different kinds. c(SRS_Rte_00072)
The RTE does NOT support a runnable entity triggered by an RTEEvent Opera-
tionInvokedEvent to be triggered by any other RTEEvent except for other Opera-
tionInvokedEvents of compatible operations. This limitation is stated in appendix
in section A.2 ([SWS_Rte_03526]).
The similar configuration as mentioned for the RunnableEntitys might be used for
BswSchedulableEntitys. Therefore even a BswSchedulableEntity whose ref-
erenced BswModuleEntry in the role implementedEntry has its isReentrant
attribute set to false can be activated by several BswEvents.
[SWS_Rte_07526] d The Basic Software Scheduler shall support activation of same
instance of a BswSchedulableEntity by multiple BswEvents. c()
4.2.7.1 General
A receiver port can only be connected to a compatible provider port. The compatibility
rules are explained in the AUTOSAR Software Component Template [2]. The compat-
ibility mainly depends on the attribute swImplPolicy attached to the element of the
interface. The table 4.7 below gives an overview of compatibility rules.
            Provide Port                                       Require Port
 Port Interface                                   Prm                         S/R     NvD
         Interface Element                        PDP                         VDP     VDP
                     swImplPolicy    fixed       const   standard standard queued     standard
                         fixed       yes         yes     yes          yes       no    yes
 Prm         PDP         const       no          yes     yes          yes       no    yes
                         standard    no          no      yes          yes       no    yes
 S/R         VDP         standard    no          no      no           yes       no    yes
                         queued      no          no      no           no        yes   no
 NvD         VDP         standard    no          no      no           yes       no    yes
                       Interface Element
                       PDP                   :   ParameterDataPrototype
                       VDP                   :   VariableDataPrototype
                       Port Interface
                       Prm                   :   ParameterInterface
                       S/R                   :   SenderReceiverInterface
                       NvD                   :   NvDataInterface
For examples, a Require Port that expects a fixed parameter - i.e produced by a macro
#define - can only be connected to a Port that provides a fixed Parameter. This is be-
cause this fixed data may be used in a compilation directive like #IF and only macro
#define (fixed data) can be compiled in this case. On the other hand, this provided fixed
parameter can be connected to almost every require port, except a queued Sender/re-
ceiver interface.
The RTE doesnt have to check the compatibility between ports since this task is per-
formed at the VFB level. But it shall provide the right implementation of interface el-
ement and API according the attribute swImplPolicy attached to the interface ele-
ment.
  3
    calibration parameter have to be allocated in RAM if data emulation with SW support is required,
see 4.2.8.3.5
Basically the Meta Model defines two different flavors of rule based value specifica-
tions:
    ApplicationRuleBasedValueSpecification
    NumericalRuleBasedValueSpecification
The ApplicationRuleBasedValueSpecification defines the values in the
physical representation whereas the NumericalRuleBasedValueSpecification
defines the values in the numerical representation. (See document [2], section Data
Description) But both are using the RuleBasedValueSpecification to define a
set of values based on a rule and arguments for the rule.
Especially in case of large arrays an high amount of initial values are required. But
many arrays are initialized with identical values or at least filled up to the end with iden-
tical values. For such use case the RuleBasedValueSpecification of category
FILL_UNTIL_END can be used to avoid the creation and maintenance of redundant
ValueSpecifications.
[SWS_Rte_06764] d The RTE Generator shall support ApplicationRuleBased-
ValueSpecifications for DataPrototypes typed by ApplicationArray-
DataTypes. c(SRS_Rte_00239)
[SWS_Rte_06765] d The RTE Generator shall support NumericalRuleBasedVal-
ueSpecifications for DataPrototypes typed by ImplementationDataTypes
of category ARRAY and for Compound Primitive Data Types which are
mapped to ImplementationDataTypes of category ARRAY. c(SRS_Rte_00239)
[SWS_Rte_06733] d The RTE Generator shall support RuleBasedValueSpecifi-
cations with the rule FILL_UNTIL_END. c(SRS_Rte_00239)
[SWS_Rte_08542] d The RTE Generator shall support RuleBasedValueSpecifi-
cations with the rule FILL_UNTIL_MAX_SIZE. c(SRS_Rte_00239)
[SWS_Rte_06734] d The RTE shall initialize the elements of the array ac-
cording the values defined by RuleBasedValueSpecification.arguments
if a RuleBasedValueSpecification with the rule FILL_UNTIL_END or
FILL_UNTIL_MAX_SIZE is applicable.
Thereby the order of arguments corresponds to the order of elements in the array, i.e.
the first argument corresponds to the first element of the array, the second argument
corresponds to the second element of the array, and so on. c(SRS_Rte_00239)
AUTOSAR defines a standardized behavior of RuleBasedValueSpecifications
only for the rules FILL_UNTIL_END and FILL_UNTIL_MAX_SIZE. RTE vendors are
free to add additional, non-standardized rules (see [TPS_SWCT_01495]).
[SWS_Rte_06735] d The RTE Generator shall apply the value of the last RuleBased-
ValueSpecification argument to any following element of the array until the last
element of the array if the rule is set to FILL_UNTIL_END and the number of ar-
guments is smaller than the number of elements of the array to which it is applied. c
(SRS_Rte_00239)
[SWS_Rte_08792] d The RTE Generator shall apply the value of the last Rule-
BasedValueSpecification argument to so many following elements of the ar-
ray until first maxSizeToFill elements of the array are filled if the rule is set to
FILL_UNTIL_MAX_SIZE and the number of arguments is smaller than the number of
elements of the array to which it is applied. c(SRS_Rte_00239)
[SWS_Rte_06736] d The RTE Generator shall ignore arguments that go beyond the
last element of the array if the number of arguments exceeds the number of elements
of the array to which it is applied. c(SRS_Rte_00239)
4.2.8.1 General
Calibration is the process of adjusting an ECU SW to fulfill its tasks to control physical
processes respectively to fit it to special project needs or environments. To do this two
different mechanisms are required and have to be distinguished:
  1. Measurement
     Measure whats going on in the ECU e.g. by monitoring communication data
     (Inter-ECU, Inter-Partition, Intra-partition, Intra-SWC). There are several ways to
     get the monitor data out of the ECU onto external visualization and interpretation
     tools.
  2. Calibration
     Based on the measurement data the ECU behavior is modified by changing
     parameters like runtime SW switches, process controlling data of primitive or
     composite data type, interpolation curves or interpolation fields. In the following
     for such parameters the term calibration parameter is used.
  1. RTE provides the calibration parameter access if they are specified via a Param-
     eterSwComponentType. A ParameterSwComponentType can be defined
     in order to provide ParameterDataPrototypes (via ports) to other Software
     Components.
  2. Calibration parameter access invisible for RTE
     Since multiple instantiation with code sharing is not allowed for Basic-SW and
     multiple instantiation is not always required for software components its possi-
     ble for these software to define own methods how calibration parameters are
     allocated. Nevertheless these calibration parameters shall be described in the
     belonging Basic Software Module Description respectively Software Component
     Description. In case data emulation with SW-support is used, the whole software
     and tool chain for calibration and measurement, e.g. Basic-SW (respectively XCP
     driver) which handles emulation details and data exchange with external calibra-
     tion tools then has to deal with several emulation methods at once: The one
     the RTE uses and the other ones each Basic-SW or SWC using local calibration
     parameters practices.
The way how measurement and calibration is performed is company, domain and
project specific. Nevertheless two different basic situations can be distinguished and
are important for understanding:
  1. Offline calibration
     Measure when ECU is running, change calibration data when ECU is off.
     Process might look like this:
       (a) Flash the ECU with current program file
       (b) PowerUp ECU in target (actual or emulated) environment
       (c) Measure running ECU behavior - log or monitor via external tooling
       (d) Switch off ECU
       (e) Change calibration parameters and create a new flashable program file (hex-
           file) e.g. by performing a new SW make run
       (f) Back to (a).
      Do loop as long as a need for calibration parameter change exists or the Flash
      survives.
  2. Online calibration
      flashing when modifying ECU parameters. ECU works temporarily with changed
      data and when the calibration process is over the result is an updated set of
      calibration data. In next step this new data set might be merged into the existing
      program file or the new data set might be an input for a new SW make run. In
      both cases the output is a new program file to flash into the ECU.
      Process might look like this:
       (a) Flash the ECU with current program file
       (b) PowerUp ECU in target environment
       (c) Measure running ECU behavior and temporarily modify calibration parame-
           ters. Store set of updated calibration parameters (not on the ECU but on the
           calibration tool computer). Actions in step c) may be done iteratively.
       (d) Switch off ECU
       (e) Create a new flashable program file (hex-file) containing the new calibration
           parameters
      Procedure over
4.2.8.2 Measurement
The AUTOSAR SW-C template specification [2] explains to which AUTOSAR proto-
types a measurement pattern can be applied.
RTE provides measurement support for
  1. communication between Ports
     Measurable are
           VariableDataPrototypes of a SenderReceiverInterface used in
            a PortPrototype (of a SwComponentPrototype) to capture sender-
            receiver communication or between SwComponentPrototypes
           VariableDataPrototypes of a NvDataInterface used in a PortPro-
            totype (of a SwComponentPrototype) to capture non volatile data com-
            munication or between SwComponentPrototypes
           ArgumentDataPrototypes of an ClientServerOperation in a
            ClientServerInterface to capture client-server communication be-
            tween SwComponentPrototypes
  2. communication inside of AUTOSAR SW-Cs
     Measurable are implicitInterRunnableVariable,                  explicitInter-
     RunnableVariable or arTypedPerInstanceMemory
The way how measurement data is read out of the ECU is not focus of the RTE spec-
ification. But the RTE structure and behavior must be specified in that way that mea-
surement values can be provided by RTE during ECU program execution.
To avoid synchronization effort it shall be possible to read out measurement data asyn-
chronously to RTE code execution. For this the measurement data must be stable. As
a consequence this might forbid direct reuse of RAM locations for implementation of
several AUTOSAR communications which are independent of each other but occurring
sequentially in time (e.g. usage of same RAM cell to store uint8 data sender receiver
communication data between Runnables at positions 3 and 7 and later the same RAM
cell for the communication between Runnables at positions 9 and 14 of same periodi-
cally triggered task). So applying measurable elements might lead to less optimizations
in the generated RTEs code and to increased RAM need.
There are circumstances when RTE will store same communication data in different
RAM locations, e.g. when realizing implicit sender receiver communication or Inter
Runnable Variables with implicit behavior. In these cases there is only the need to
have the content of one of these stores made accessible from outside.
input configuration.
Sender-receiver communication
[SWS_Rte_03900] d If the swCalibrationAccess of a VariableDataPrototype
used in an interface of a sender-receiver port of a SwComponentPrototype is set
to readOnly or readWrite the RTE generator has to provide one reference to a
location in memory where the actual content of the instance specific data of the cor-
responding VariableDataPrototype of the communication can be accessed. c
(SRS_Rte_00153)
To prohibit multiple measurement values for same communication:
(Note that affected VariableDataPrototypes might be specified in same or com-
patible port interfaces.)
[SWS_Rte_03972] d For 1:1 and 1:N sender-receiver communication the RTE shall
provide measurement values taken from sender side if measurement is demanded in
provide and require port. c(SRS_Rte_00153)
[SWS_Rte_03973] d For N:1 intra-ECU sender-receiver communication the RTE shall
provide measurement values taken from receiver side if measurement is demanded in
provide and require ports. c(SRS_Rte_00153)
Note:
See further below for support of queued communication.
4.2.8.3 Calibration
The RTE and Basic Software Scheduler has to support the allocation of calibration
parameters and the access to them for SW using them. As seen later on for some
calibration methods the RTE and Basic Software Scheduler must contain support SW
too (see 4.2.8.3.5). But in general the RTE and Basic Software Scheduler is not re-
sponsible for the exchange of the calibration data values or the transportation of them
between the ECU and external calibration tools.
The following sections are mentioning only the RTE but this has to be understood in
the context that the support for Calibration is a functionality which affects the Basic
Software Scheduler part of the RTE as well. In case of the Basic Software Scheduler
Generation Phase (see 3.4.1) this functionality might even be provided with out any
other software component related RTE functionality.
With AUTOSAR, a calibration parameter (which the AUTOSAR SW-C template spec-
ification [2] calls ParameterSwComponentType) is instantiated with a Parameter-
DataPrototype that aggregates a SwDataDefProps with properties swCalibra-
tionAccess = readWrite and swImplPolicy = standard. This chapter applies
to this kind of ParameterSwComponentTypes. For other combinations of these prop-
erties, consult the section 4.2.7
  4. Calibration parameters defined in Basic Software Modules can only be used in-
     side the defining Basic Software Module and are not visible to other Basic Soft-
     ware Modules. In contrast to AUTOSAR SW-Cs, Basic Software Modules can
     only define instance specific calibration parameters.
[SWS_Rte_03958] d Several AUTOSAR SW-Cs (and also several instances of AU-
TOSAR SW-Cs) shall be able to share same calibration parameters defined in Param-
eterSwComponentTypes. c(SRS_Rte_00154, SRS_Rte_00159)
[SWS_Rte_07186] d The generated RTE shall initialize the memory objects im-
plementing ParameterDataPrototypes in p-ports of ParameterSwComponent-
Types according the ValueSpecification of the ParameterProvideComSpec
referring the ParameterDataPrototype in the p-port,
    if such ParameterProvideComSpec exists and
    if no CalibrationParameterValue refers to the FlatInstanceDescrip-
     tor associated to the ParameterDataPrototype
This is also applicable if the swImplPolicy = fixed and if the related Parameter-
DataPrototype is implemented as preprocessor define which does not immediately
allocate a memory object. c(SRS_Rte_00154, SRS_Rte_00159)
[SWS_Rte_07029] d The generated RTE shall initialize the memory objects im-
plementing ParameterDataPrototypes in p-ports of ParameterSwComponent-
Types according the ValueSpecification in the role implInitValue of the Cal-
ibrationParameterValue referring the FlatInstanceDescriptor associated
to the ParameterDataPrototype if such CalibrationParameterValue is de-
fined. c(SRS_Rte_00154)
Note: the initialization according [SWS_Rte_07029] and [SWS_Rte_07030] precedes
the initialization values defined in the context of an component type and used in
[SWS_Rte_07185] and [SWS_Rte_07186]. This enables to provide initial values for
calibration parameter instances to:
    predefine start values for the calibration process
    utilizes the result of the calibration process
    take calibration parameter values from previous projects
[SWS_Rte_03959] d If the SwcInternalBehavior aggregates an ParameterDat-
aPrototype in the role perInstanceParameter the RTE shall support the access
to instance specific calibration parameters of the AUTOSAR SW-C. c(SRS_Rte_00154,
SRS_Rte_00158)
[SWS_Rte_05112] d If the SwcInternalBehavior aggregates an ParameterDat-
aPrototype in the role sharedParameter the RTE shall create a common access
to the shared calibration parameter. c(SRS_Rte_00154, SRS_Rte_00159)
[SWS_Rte_07096] d If the BswInternalBehavior aggregates an ParameterDat-
aPrototype in the role perInstanceParameter the Basic Software Scheduler
shall support the access to instance specific calibration parameters of the Basic Soft-
ware Module. c(SRS_Rte_00154, SRS_Rte_00158)
[SWS_Rte_07185] d The generated RTE and Basic Software Scheduler shall initialize
the memory objects implementing ParameterDataPrototype in the role perIn-
stanceParameter or sharedParameter
    if it has a ValueSpecification in the role initValue according to this Val-
     ueSpecification and
    if no CalibrationParameterValue refer to the FlatInstanceDescriptor
     associated to the ParameterDataPrototype
This is also applicable if the swImplPolicy = fixed and if the related Parameter-
DataPrototype is implemented as preprocessor define which does not immediately
allocate a memory object. c(SRS_Rte_00154)
[SWS_Rte_07030] d The generated RTE and Basic Software Scheduler shall initialize
the memory objects implementing ParameterDataPrototypes in the role perIn-
stanceParameter or sharedParameter according the ValueSpecification in
the role the implInitValue of the CalibrationParameterValue referring the
FlatInstanceDescriptor associated to the ParameterDataPrototype if such
CalibrationParameterValue is defined. c(SRS_Rte_00154)
It might be project specific or even project phase specific which calibration parameters
have to be calibrated and which are assumed to be stable. So it shall be selectable
on ParameterSwComponentTypes and AUTOSAR SW-C granularity level for which
calibration parameters RTE shall support calibration.
If an r-port contains a ParameterDataPrototype, the following requirements spec-
ify its behavior if the port is unconnected.
[SWS_Rte_02749] d In case of an unconnected parameter r-port, the RTE shall set the
values of the ParameterDataPrototypes of the r-port according to the initValue
of the r-ports ParameterRequireComSpec referring to the ParameterDataPro-
totype. c(SRS_Rte_00139, SRS_Rte_00159)
If the port is unconnected, RTE expects an init value, see [SWS_Rte_02750].
ParameterDataPrototypes in role romBlock
[SWS_Rte_07033] d If the swCalibrationAccess of a ParameterDataProto-
type in the role romBlock is set to readWrite the RTE generator has to provide
one reference to a location in memory where the actual content of the romBlock can
be accessed. c(SRS_Rte_00154)
[SWS_Rte_07034] d The generated RTE shall initialize any ParameterDataProto-
type in the role romBlock
    if it has a ValueSpecification in the role initValue according to this Val-
     ueSpecification and
Sometimes it is required that one or more calibration parameters out of the mass of cal-
ibration parameters of an ParameterSwComponentType respectively an AUTOSAR
SW-C shall be placed in another memory location than the other parameters of the Pa-
rameterSwComponentType respectively the AUTOSAR SW-C. This might be due to
security reasons (separate normal operation from monitoring calibration data in mem-
ory) or the possibility to change calibration data during a diagnosis session (which the
calibration parameter located in NVRAM).
[SWS_Rte_03907] d The RTE generator shall support separation of calibration param-
eters from ParameterSwComponentTypes, AUTOSAR SW-Cs and Basic Software
Modules depending on the ParameterDataPrototype property swAddrMethod. c
(SRS_Rte_00154, SRS_Rte_00158)
RTE is significantly involved when SW support is required and has to create calibration
method specific SW. Different calibration methods means different support in Basic
SW which typically is ECU integrator specific. So it does not make sense to support
DIFFERENT data emulation with SW support methods in ANY one RTE build. But
it makes sense that the RTE supports direct access (see section 4.2.8.3.4) for some
AUTOSAR SW-Cs resp. ParameterSwComponentTypes resp. Basic Software Mod-
ules and one of the data emulation with SW support methods (see section 4.2.8.3.5)
for all the other AUTOSAR SW-Cs resp. ParameterSwComponentTypes resp. Basic
Software Modules at the same time.
[SWS_Rte_03909] d The RTE shall support only one of the data emulation with SW
support methods at once. c(SRS_Rte_00154, SRS_Rte_00156)
For "online calibration" (see section 4.2.8.1) the ECU is provided with additional
hardware which consists of control logic and memory to store modified calibration
parameters in. During ECU execution the brought in control logic redirects memory
accesses to new bought in memory whose content is modified by external tooling
without disturbing normal ECU program flow. Some microcontrollers contain features
supporting this. A lot of smaller microcontrollers dont. So this methods is highly HW
dependent.
To support these cases the RTE doesnt have to provide e.g. a reference table like
described in section 4.2.8.3.5. Exchange of ParameterDataPrototype content is
done invisibly for program flow and for RTE too.
[SWS_Rte_03942] d The RTE generator shall have the option to switch off data emu-
lation with SW support for generated RTE code. This option shall influence complete
RTE code at once. c(SRS_Rte_00154, SRS_Rte_00156)
In case "online calibration" (see section 4.2.8.1) is required, quite often data emulation
without support by special SW constructs isnt possible. Several methods exist, all
have the consequence that additional need of ECU resources like RAM, ROM/FLASH
and runtime is required.
Data emulation with SW support is possible in different manners. During calibration
process in each of these methods modified calibration data values are kept typically in
RAM. Modification is controlled by ECU external tooling and supported by ECU internal
SW located in AUTOSAR basic SW or in complex driver.
If calibration process isnt active the accessed calibration data is originated in
ROM/FLASH respectively in NVRAM in special circumstances (as seen later on).
Since multiple instantiation is to be supported several instances of the same
ParameterDataPrototypes have to be allocated. Because the RTE is the only
one SW in an AUTOSAR ECU able to handle the different instances the access to these
calibration parameters can only be handled by the RTE. So the RTE has to provide
additional SW constructs required for data emulation with SW support for calibration.
However the RTE doesnt know which of the ECU functionality shall be calibrated dur-
ing a calibration session. To allow expensive RAM to be reused to calibrate different
ECU functionalities in one or several online calibration sessions (see 4.2.8.1) in case of
the single and double pointered methods for data emulation with SW support described
below the RTE has only to provide the access to ParameterDataPrototypes dur-
ing runtime but allowing other SW (a BSW module or a complex driver) to redirect the
access to alternative calibration parameter values (e.g. located in RAM) invisibly for
application.
The RTE is neither the instance to supply the alternative values for ParameterDat-
aPrototypes nor in case of the pointered methods for data emulation with SW sup-
port to do the redirection to the alternative values.
[SWS_Rte_03910] d The RTE shall support data emulation with SW support for cali-
bration. c(SRS_Rte_00154, SRS_Rte_00156)
[SWS_Rte_03943] d The RTE shall support these data emulation methods with SW
support:
    Single pointered calibration parameter access
     further called "single pointered method"
    Double pointered calibration parameter access further called "double pointered
     method"
    Initialized RAM parameters further called "initRAM parameter method"
c(SRS_Rte_00154, SRS_Rte_00156)
Please note that the support data emulation methods is applicable for calibration pa-
rameters provided for software components as well as calibration parameters provided
for basic software modules.
ParameterElementGroup
To save RAM/ROM/FLASH resources in single pointered method and double point-
ered method ParameterDataPrototype allocation is done in groups. One entry
of the calibration reference table references the begin of a group of Parameter-
DataPrototypes. For better understanding of the following, this group is called
ParameterElementGroup (which is no term out of the AUTOSAR SW-C template
specification [2]). One ParameterElementGroup can contain one or several
ParameterDataPrototypes.
There is one calibration reference table in RAM with references to one or several
ParameterElementGroups. Accesses to calibration parameters are indirectly per-
formed via this reference table.
Action during calibration procedure e.g. calibration parameter value exchange is not
focus of this specification. Nevertheless an example is given for better understanding.
Example how the exchange of calibration parameters could be done for single point-
ered method:
  1. Fill a RAM buffer with the modified calibration parameter values for complete
     ParameterElementGroup
  2. Modify the corresponding entry in the calibration reference table so that a redi-
     rection to new ParameterElementGroup is setup
There is one calibration reference table in ROM respectively Flash with references
to one or several ParameterElementGroups. Accesses to calibration parameters
are performed through a double indirection access. During system startup the base
reference is initially filled with a reference to the calibration reference table.
Action during calibration procedure e.g. calibration parameter value exchange is not
focus of this specification. Nevertheless an example is given for better understanding.
Example how the exchange of calibration parameters could be done for double point-
ered method:
  1. Copy the calibration reference table into RAM
  2. Fill a RAM buffer with modified calibration parameter values for complete Param-
     eterElementGroup
  3. Modify the corresponding entry in the RAM copy of the reference table so that a
     redirection to new ParameterElementGroup is setup
  4. Change the content of the base reference so that it references the calibration
     reference table copy in RAM.
Now calibration parameter accesses deliver the modified values.
For handling of calibration parameters located in NVRAM with single or double point-
ered method see [SWS_Rte_03936] in section 4.2.8.3.5.1. General information is
found in section 4.2.8.3.6).
Copy
                  ...                                         ...
              Parameter in                           Copied parameter in
              ROM / FLASH                                   RAM
                    Figure 4.27: initRam Parameter method setup
For data emulation with SW support with single or double pointered methods the RTE
has to guarantee access to each single member of a ParameterElementGroup for
source code and object code delivery independent if the member is a primitive or a
composite data type. For this the creation of a record type for a ParameterEle-
mentGroup was chosen.
[SWS_Rte_03916] d One ParameterElementGroup shall be realized as one record
type. c(SRS_Rte_00154, SRS_Rte_00156)
The sequence order of ParameterDataPrototype in a ParameterElementGroup
and the order of ParameterElementGroups in the reference table will be docu-
mented by the RTE Generator by the means of the McSwEmulationMethodSupport,
see 4.2.8.4.4.
Since only the RTE knows which instances of AUTOSAR SW-Cs, ParameterSwCom-
ponentTypes and Basic Software Modules are present on the ECU the RTE has
to allocate the calibration parameters and reserve memory for them. This approach
is also covering multiple instantiated object code integration needs. So memory for
instantiated ParameterDataPrototypes is neither provided by ParameterSwCom-
ponentTypes nor by AUTOSAR SW-C.
Nevertheless AUTOSAR SW-Cs and Basic Software Modules can define calibration
parameters which are not instantiated by RTE. These are described by Parameter-
DataPrototypes in the role constantMemory. Further on the RTE can not imple-
ment any software support for data emulation for such calibration parameters. Hence
those kind of calibration parameters are not described in the generated McSupportData
of the RTE (see 4.2.8.4).
[SWS_Rte_03961] d The RTE shall allocate the memory for calibration parameters. c
(SRS_Rte_00154, SRS_Rte_00156)
A ParameterDataPrototype can be defined to be instance specific or can be
shared over all instances of an AUTOSAR SW-C or a ParameterSwComponent-
Type. The input for the RTE generator contains the values the RTE shall apply to the
calibration parameters.
To support online and offline calibration (see section 4.2.8.1) all parameter values for
all instances have to be provided.
Background:
    For online calibration often initially the same default values for calibration param-
     eters can be applied. Variation is then handled later by post link tools. Initial
     ECU startup is not jeopardized. This allows the usage of a default value e.g. by
     AUTOSAR SW-C or ParameterSwComponentType supplier for all instances of
     a ParameterDataPrototype.
    On the other hand applying separate default values for the different instances of
     a ParameterDataPrototype will be required often for online calibration too, to
     make a vehicle run initially. This requires additional configuration work e.g. for
     integrator.
    Offline calibration based on new SW build including new RTE build and com-
     pilation process requires all calibration parameter values for all instances to be
     available for RTE.
Shared ParameterDataPrototypes
[SWS_Rte_03962] d For accesses to a shared ParameterDataPrototype the RTE
API shall deliver the same one value independent of the instance the calibration pa-
rameter is assigned to. c(SRS_Rte_00154, SRS_Rte_00156)
[SWS_Rte_03963] d The calibration parameter of a shared ParameterDat-
aPrototype shall be stored in one memory location only. c(SRS_Rte_00154,
SRS_Rte_00156)
Requirements [SWS_Rte_03962] and [SWS_Rte_03963] are to guarantee that only
one physical location in memory has to be modified for a change of a shared Param-
eterDataPrototype. Otherwise this could lead to unforeseeable confusion.
Multiple locations are possible for calibration parameters stored in NVRAM. But there
a shared ParameterDataPrototype is allowed to have only one logical data too.
different projects but allowing allocation of measurement data stores resp. calibration
parameters in different sections.
Section usage typically depends on availability of HW resources. In one project the
micro controller might have less internal RAM than in another project, requiring that
most measurement data have to be placed in external RAM. In another project one
addressing method (e.g. indexed addressing) might be more efficient for most of the
measurement data - but not for all. Or some calibration parameters are accessed
less often than others and could be - depending on project specific FLASH availability
- placed in FLASH with slower access speed, others in FLASH with higher access
speed.
Calibration parameters can be located in NVRAM too. One use case for this is to have
the possibility to modify calibration parameters via a diagnosis service without need for
special calibration tool.
To allow NVRAM calibration parameters to be accessed, NVRAM with statically allo-
cated RAM buffer in form of PIM memory for the calibration parameters has to be de-
fined or the ramBlock of a NvBlockSwComponentType defines readWrite access
for the MCD system. Please see as well [SWS_Rte_07174] and [SWS_Rte_07160].
Note:
As the NVRAM Manager might not be able to access the PerInstanceMemory
across core boundaries in a multi core environment, the support of Calibration pa-
rameters in NVRAM for multi core controllers is limited. See also note in 4.2.9.1.
In complex systems the situation occur that calibration parameter values may depend
on the configuration of the vehicle due to functional side effects. The difficulty is that
those dependencies are typically detected after design of the software components and
shall not change the software component design. In addition the overall ECU SW has
to support all vehicle variants and therefore the detection and selection of the concrete
vehicle variant needs to be done post build.
[SWS_Rte_06815] d The RTE Generator shall provide one separate memory location
per FlatInstanceDescriptor pointing to the identical ParameterDataProto-
type instance in the root software composition. c(SRS_Rte_00154, SRS_Rte_00191)
Thereby the FlatInstanceDescriptor needs to have different postBuildVari-
antConditions as described in [constr_3114]. As a consequence at most one lo-
cation in memory location created according [SWS_Rte_06815] can be active in a
specific post build variant. This value needs to be accessed by the according RTE
APIs Rte_CData and Rte_Prm accessing parameters.
[SWS_Rte_06816] d For accesses to a ParameterDataPrototype the RTE API
shall deliver the value of the memory location which belongs to the currently selected
post build variant. c(SRS_Rte_00154, SRS_Rte_00156, SRS_Rte_00191)
In order to ensure the functionality of Rte_CData and Rte_Prm depending on post
build variability it needs to be ensured, that exactly one FlatInstanceDescriptor
is selected in a specific post build variant when the RTE generator creates an RTE Post
Build Data Set, see section 3.6.
The binding of the post build variability is done at the call of SchM_Init according the
passed post build data set as described in sections section 4.7.2 and section 5.3.10
Please note that the requirements [SWS_Rte_07029] and [SWS_Rte_07030] also
apply in this scenario and therefore the different memory locations due to multiple
FlatInstanceDescriptors can get different initial values.
The following example shall illustrate the usage of post build variant FlatIn-
stanceDescriptors in combination with multiple instantiation. The raw ARXML is
listed in the section F.5.
In the given configuration a ParameterSwComponentType PSWC is defined with on
PPortPrototype EP typed by the ParameterInterface EP. The root software com-
position defines two SwComponentPrototypes SWC_PA and SWC_PB.
The ApplicationSwComponentType ASWC defines RPortPrototype EP, a
perInstanceParameter PIP and a sharedParameter SP The root software
composition defines two SwComponentPrototypes SWC_A and SWC_B and there-
fore two component instances for the component type ASWC exist. PPortPrototype
EP of SWC_PA is connected to RPortPrototype EP of SWC_A, PPortPrototype
EP of SWC_PB is connected to RPortPrototype EP of SWC_B. (not shown in the
figure 4.28)
Please note that the resulting names of the memory locations are not standardized but
the applied pattern shall illustrate to which information in the input model they belong
to. Assuming now following configuration in the Flat Map:
SWC_A_PIP_Z0 {depends on PostBuildVariantCriterion Z= 0}
SWC_A_PIP_Z1 {depends on PostBuildVariantCriterion Z = 1}
SWC_B_PIP
SWC_A_SWC_B_SP_Z0 {depends on PostBuildVariantCriterion Z= 0}
SWC_A_SWC_B_SP_Z1 {depends on PostBuildVariantCriterion Z= 1}
SWC_PA_EP_Prm1_Z0 {depends on PostBuildVariantCriterion Z= 0}
SWC_PA_EP_Prm1_Z1 {depends on PostBuildVariantCriterion Z= 1}
SWC_PB_EP_Prm1
There are different possibility to implement this mechanism. Nevertheless there are
cross dependencies to the requirements concerning Data emulation with SW support
in section 4.2.8.3.5.
One possibility is to create an array of parameter values which contains one array el-
ement for each different Post Build Variant. The used index for this parameter value
array in the relate RTE API is determined by the chosen variant in the post build con-
figuration of the RTE and indexes the active array element. With this approach its
easier to combine multiple calibration data instances with the Data emulation with SW
support feature since the number of ParameterElementGroups are not changed.
An other approach is to create one base pointer per identical combination of post-
BuildVariantConditions applied to calibration parameters. The related calibra-
tion parameters are grouped into a structure and for each combination of postBuild-
VariantConditions one instance of the structure is created. The base pointer is
initialized according chosen variant in the post build configuration of RTE and points to
the active structure instance.
The RTE Generator supports the definition, allocation and access to measurement
and calibration data for Software Components as well as for Basic Software. The
specific support of measurement and calibration tools however is neither in the focus
of the RTE Generator nor AUTOSAR. This would require the generation of an "A2L"-
file (like specified in [20]) which is the standard in this domain  but out of the focus of
AUTOSAR.
The RTE Generator however shall support an intermediate exchange format called
McSupportData which is building the bridge between the ECU software and the fi-
nal "A2L"-file needed by the measurement and calibration tools. The details about
the McSupportData format and the involved methodology are described in the Basic
Software Module Description Template document [9].
In this section the requirements on the RTE Generator are collected which elements
shall be provided in the McSupportData element.
Figure 4.31 shows the structure of the McSupportData element. The McSupport-
Data element and its sub-content is part of the Implementation element. In case
of the RTE this is the BswImplementation element which is generated / updated by
the RTE Generator in the Generation Phase (see [SWS_Rte_05086] in chapter 3.4.2).
[SWS_Rte_05118] d The RTE Generator in Generation Phase shall create the McSup-
portData element as part of the BswImplementation description of the generated
RTE. c(SRS_Rte_00189)
                                                  +measurableSystemConstantValues                0..*
                                                                                                                                                             atpVariation,atpSplitable
atpSplitable
                                                                                                                                                                +flatMap     0..1
                                        atpVariation Tags:
                                                                                       atpVariation,atpSplitable                                                            ARElement
                                        vh.latestBindingTime =
                                                                                                                                                                             AtpBlueprint
                                        preCompileTime
                                                                                                                                                                         AtpBlueprintable
                                                                                                                       atpVariation Tags:                           FlatMap
                 atpVariation                                                                                        vh.latestBindingTime =
                                                                 atpVariation,atpSplitable
                                                                                                                       postBuild
                                                                                                                                                         atpVariation,atpSplitable
                                                                 +mcParameterInstance            +mcVariableInstance
+emulationSupport         0..*                                                 0..*                   0..*                                                     +instance    1..*
                                                                                                        Identifiable                                                             Identifiable
   McSwEmulationMethodSupport
                                                                                McDataInstance                                                                FlatInstanceDescriptor
   +       category :Identifier                                                                                                         +flatMapEntry
   +       shortLabel :Identifier                                  +   arraySize :PositiveInteger [0..1]                                                 +    role :Identifier [0..1]
                                                                   +   displayIdentifier :McdIdentifier [0..1]                                    0..1
                                                                   +   role :Identifier [0..1]
                                              atpVariation       +   symbol :SymbolString [0..1]
                                                                                                                                  +mcDataAssignment
                                                                   +subElement                                                                           RoleBasedMcDataAssignment
                                                                   0..* {ordered}                                                                 0..*
                                                                                                                       +mcDataInstance                   +    role :Identifier [0..1]
0..*
                                                                                                                0..1
                                                 +resultingProperties 0..1
                                                                                                               +resultingRptSwPrototypingAccess
                                            atpVariation
                                           SwDataDefProps                                                                         RptSwPrototypingAccess
                                                                                                                enumeration                         enumeration
                                                                                                              RptPreparationEnum                 RptEnablerImplTypeEnum
                                                                                                              none                                 none
                                                                                                              rptLevel1                            rptEnablerRam
                                                                                                              rptLevel2                            rptEnablerRom
                                                                                                              rptLevel3                            rptEnablerRamAndRom
The individual measurable and calibratable data is described using the element Mc-
DataInstance. This is aggregated from McSupportData in the role mcVariable-
Instance (for measurement) or mcParameterInstance (for calibration).
Usage of the FlatMap
The FlatMap is part of the Ecu Extract of System Description and contains a collection
of FlatInstanceDescriptor elements. The details of the FlatMap are described
in the Specification of the System Template [8].
In particular the FlatMap may be request several parameter instances for the identical
ParameterDataPrototype as described in section 4.2.8.3.7.
Common attributes of McDataInstance
The element McDataInstance specifies one element of the McSupportData. The
following requirement specify common attributes which shall to be filled in a harmo-
nized way.
[SWS_Rte_05130] d The RTE Generator shall use the shortName of the
FlatInstanceDescriptor as the shortName of the McDataInstance.   c
(SRS_Rte_00189)
[SWS_Rte_03998] d The RTE Generator shall use the AliasNameAssign-
ment.shortLabel referencing the according FlatInstanceDescriptor as the
displayIdentifier of the McDataInstance. c(SRS_Rte_00189)
[SWS_Rte_05131] d If the input element (e.g. ApplicationDataType or Im-
plementationDataType) has a category specified the category value shall be
copied to the McDataInstance element. c(SRS_Rte_00189)
[SWS_Rte_05132] d If the input element (e.g. ApplicationDataType or Imple-
mentationDataType) specifies an array, the attribute arraySize of McDataIn-
stance shall be set to the size of the array. c(SRS_Rte_00189)
[SWS_Rte_05133] d If the input element (e.g. ApplicationDataType or Im-
plementationDataType) specifies a record, the McDataInstance shall aggre-
gate the record elements parts as subElements of type McDataInstance. c
(SRS_Rte_00189)
[SWS_Rte_05119] d The McSupportData element and its sub-structure shall be self-
contained in the sense that there is no need to deliver the whole upstream descriptions
of the ECU (including the ECU Extract, Software Component descriptions, Basic Soft-
ware Module descriptions, ECU Configuration Values descriptions, Flat Map, etc.) in
order to later generate the final "A2L"-file. This means that the RTE Generator has
to copy the required information from the upstream descriptions into the McSupport-
Data element. c(SRS_Rte_00189)
[SWS_Rte_05129] d The RTE Generator in Generation Phase shall export the effec-
tive SwDataDefProps (including all of the referenced and aggregated sub-elements
like e.g. CompuMethod or SwRecordLayout) in the role resultingProperties
for each McDataInstance after resolving the precedence rules defined in the SW-
Component Template [2] chapter Properties of Data Definitions. Thereby the Im-
plementationDataType properties compuMethod and dataConstraint are not
taken in consideration for effective SwDataDefProps of the McDataInstance due
to their refinement nature of C and AI. c(SRS_Rte_00189)
[SWS_Rte_05135] d If a ParameterDataPrototype is associated with a Param-
eterAccess the corresponding SwDataDefProps and their sub-structure shall be
exported. c(SRS_Rte_00189)
For each flatMapEntry referencing to measurable or calibratible data prototype or
measureable ModeDeclarationGroupPrototype the McDataInstance shall be
generated in the McSupportData. Thereby the effected SwDataDefProps shall be
taken from the data prototype according the precedence rules defined in the SWCT.
[SWS_Rte_08313] d The RTE Generator shall create McDataInstance element(s)
in the McSupportData for each measurable or calibratible DataPrototype / Mod-
eDeclarationGroupPrototype referenced by a FlatInstanceDescriptor. c
(SRS_Rte_00189)
Explanation: In case of connected ports it may occur that the DataPrototype in the
DataInterface of the PPortPrototype and the DataPrototype in the DataInterface
of the RPortPrototype are referenced by FlatInstanceDescriptors. In this
case its intended to get two McDataInstance in order to access the value by MCD
system with two different names and may be with two different scaling (typically offset
and resolution).
In case of composite data FlatInstanceDescriptors may point to one or several
ApplicationCompositeElementDataPrototypes in order to define a individual
name for each record or array element. Thereby it is even possible that a FlatIn-
stanceDescriptor exists for the "whole" DataPrototype typed by an Appli-
cationCompositeDataType and additional FlatInstanceDescriptors exist for
the ApplicationCompositeElementDataPrototypes of such DataPrototype.
In this case a McDataInstance as child of McSupportData exists due to
the FlatInstanceDescriptors for the "whole" DataPrototype and addi-
tional McDataInstances as child of McSupportData exists for each FlatIn-
stanceDescriptor pointing to a ApplicationCompositeElementDataProto-
types in the "whole" DataPrototypes type.
[SWS_Rte_08314] d If the input element is typed by an ApplicationDataType the
subElements structure of the McDataInstance is determined by the Applica-
tionDataType. This means
    in case of ApplicationRecordDataType the number and shortName
     of the subElement is determined by the ApplicationRecordElement if
     [SWS_Rte_05133] and [SWS_Rte_08316] is applied,
    in case of ApplicationArrayDataType the number of the subElements is
     determined by the ApplicationArrayElement if [SWS_Rte_08315] is ap-
     plied,
Sender-Receiver communication
[SWS_Rte_05120] d If the swCalibrationAccess of a VariableDataPrototype
used in an interface of a sender-receiver port of a SwComponentPrototype is set
to readOnly or readWrite and RteMeasurementSupport is set to true the RTE
Generator shall create a McDataInstance element with
    symbol set to the C-symbol name used for the allocation (see also
     [SWS_Rte_03900])
    symbol set to the C-symbol name used for the allocation (see also
     [SWS_Rte_07197])
    flatMapEntry referencing to the corresponding FlatInstanceDescriptor
     element of the VariableDataPrototype
c(SRS_Rte_00153, SRS_Rte_00189)
Calibration can be either actively supported by the RTE using the pre-defined cali-
bration mechanisms of section 4.2.8.3.5 or calibration can be transparent to the RTE.
In both cases the location and attributes of the calibratable data has to be provided
by the RTE Generator in the Generation Phase in order to support the setup of the
measurement and calibration tools.
ParameterDataPrototypes of ParameterSwComponentType
[SWS_Rte_05126] d For each FlatInstanceDescriptor referencing a Parame-
terDataPrototype instance in a PortPrototype of a ParameterSwComponent-
Type with the swCalibrationAccess set to readOnly or readWrite an entry in
the McSupportData with the role mcParameterInstance shall be created with the
following attributes:
    symbol set to the C-symbol name used for the allocation
    flatMapEntry referencing to the corresponding FlatInstanceDescriptor
     element of the ParameterDataPrototype
c(SRS_Rte_00189)
Shared ParameterDataPrototypes
[SWS_Rte_05127] d For each FlatInstanceDescriptor referencing a Parame-
terDataPrototype instance of a AtomicSwComponentTypes SwcInternalBe-
havior aggregated in the role sharedParameter with the swCalibrationAccess
set to readOnly or readWrite an entry in the McSupportData with the role mcPa-
rameterInstance shall be created with the following attributes:
    symbol set to the C-symbol name used for the allocation
    flatMapEntry referencing to the corresponding FlatInstanceDescriptor
     element of the ParameterDataPrototype
c(SRS_Rte_00189)
Instance specific ParameterDataPrototypes
[SWS_Rte_05128] d For each FlatInstanceDescriptor referencing a Param-
eterDataPrototype instance of a AtomicSwComponentTypes SwcInternal-
Behavior aggregated in the role perInstanceParameter with the swCalibra-
The RTE does provide several Software Emulation Methods which can be selected in
the Ecu Configuration of the RTE (see section 7.2).
Which Software Emulation Method has been used for a particular RTE Generation shall
be documented in the McSupportData in order to allow measurement and calibration
tools to support the RTEs Software Emulation Methods. Additionally it is also possible
for an RTE Vendor to add custom Software Emulation Methods which needs to be
documented as well. The structure of the McSwEmulationMethodSupport is shown
in figure 4.32.
                                          AtpStructureElement                                                ARElement
                        InternalBehavior                                                   Implementation
                                                                                          atpSplitable
atpVariation,atpSplitable          atpVariation,atpSplitable
                                                                                     +mcSupport     0..1
McSupportData
atpVariation
0..1
                                                           +referenceTable
                                                                                                                                 RteCalibrationSupport :
                                                           0..1                                                                EcucEnumerationParamDef
                                                                                                                                  defaultValue = NONE
                                                                                   +elementGroup     0..*
                                                           +ramLocation
                                                                                     McParameterElementGroup
                                                           1
[SWS_Rte_05137] d The RTE Generator in Generation Phase shall create the Mc-
SwEmulationMethodSupport element as part of the McSupportData description
of the generated RTE. c(SRS_Rte_00189)
[SWS_Rte_05138] d The RTE Generator in Generation Phase shall set the value of the
category attribute of McSwEmulationMethodSupport element according to the
implemented Software Emulation Method based on the Ecu configuration parameter
RteCalibrationSupport:
       NONE
       SINGLE_POINTERED
       DOUBLE_POINTERED
       INITIALIZED_RAM
       custom category name: vendor specific Software Emulation Method
c(SRS_Rte_00189)
The description of the generated structures is using the existing mechanisms already
available in the Basic Software Module Description Template [9].
Description of ParameterElementGroup
For the description of the ParameterElementGroup an Implementation-
DataType representing a structure of the group is created ([SWS_Rte_05139]).
[SWS_Rte_05139] d For each generated ParameterElementGroup an Implemen-
tationDataType shall be created. The contained ParameterDataPrototypes
are aggregated with the role subElement as ImplementationDataTypeElement.
c(SRS_Rte_00189)
In the example figure 4.33 the ImplementationDataTypes are called RteMcSup-
portGroupType1 and RteMcSupportGroupType2.
McSupport description of the InitRam parameter method
For the description of the InitRam parameter method the specific ParameterEle-
mentGroups allocated in ram and rom are specified ([SWS_Rte_05140] and
[SWS_Rte_05141]). Then the collection and correspondence of these groups is spec-
ified (in [SWS_Rte_05142]).
[SWS_Rte_05140] d If the RTE Generator is configured to support the
(INITIALIZED_RAM) method the RTE Generator in generation phase shall gener-
ate for each ParameterElementGroup a ParameterDataPrototype with the role
constantMemory in the InternalBehavior of the RTEs Basic Software Module
Description. The ParameterDataPrototype shall have a reference to the corre-
sponding ImplementationDataType from [SWS_Rte_05139] with the role type. c
(SRS_Rte_00189)
[SWS_Rte_05141] d If the RTE Generator is configured to support the
(INITIALIZED_RAM) method the RTE Generator in generation phase shall gener-
ate for each ParameterElementGroup a VariableDataPrototype with the role
staticMemory in the InternalBehavior of the RTEs Basic Software Module
Description. The VariableDataPrototype shall have a reference to the corre-
sponding ImplementationDataType from [SWS_Rte_05139] with the role type.
c(SRS_Rte_00189)
[SWS_Rte_05142] d If the RTE Generator is configured to support the
(INITIALIZED_RAM) method the RTE Generator in generation phase shall gener-
ate for each ParameterElementGroup a McParameterElementGroup with the
role elementGroup in the McSwEmulationMethodSupport [SWS_Rte_05137] el-
ement.
    The McParameterElementGroup shall have a reference to the corresponding
     ParameterDataPrototype from [SWS_Rte_05140] with the role romLoca-
     tion.
    The McParameterElementGroup shall have a reference to the correspond-
     ing VariableDataPrototype from [SWS_Rte_05141] with the role ramLo-
     cation.
c(SRS_Rte_00189)
                                                                                                         +swDataDefProps
                                               +initValue
                                                                                                                 atpVariation
                                           RteMcSupportBasePointerInit :                                RteMcSupportBaseTypePointerDDP :
                                            ReferenceValueSpecification                                         SwDataDefProps
+swPointerTargetProps
                                                                                                       RteMcSupportBaseTypePointerTargetP :
                                                                                                              SwPointerTargetProps
+swDataDefProps
                                                                                                                 atpVariation
                                                                                                     RteMcSupportBaseTypePointerTargetDDP :
                                                                                                                SwDataDefProps
+referenceValue +implementationDataType
+initValue +subElement
                                             RteMcSupportPointerTableInit :                             RteMcSupportPointerTableElement :
                                                ArrayValueSpecification                                  ImplementationDataTypeElement
arraySize = 2
+element +element
                                           RteMcSupportParamGroup1Ref :                      RteMcSupportParamGroup2Ref :
                                             ReferenceValueSpecification                       ReferenceValueSpecification
+referenceValue
                        +constantMemory     RteMcSupportParamGroup1 :
                                              ParameterDataPrototype
+referenceValue
                                                                           +constantMemory     RteMcSupportParamGroup2 :
                                                                                                 ParameterDataPrototype
+type
                                                                                               RteMcSupportGroupType2 :
                                                                                                ImplementationDataType
                                                     +type
                                                                                 +subElement            MyCalParam111 :
                                                                                                  ImplementationDataTypeElement
                                             RteMcSupportGroupType1 :
                                              ImplementationDataType
                                                                                 +subElement             MyCalParam22 :
                                                                                                  ImplementationDataTypeElement
                                                                                 +subElement
                                                                                                         MyCalParam13 :
                                                                                                  ImplementationDataTypeElement
The Rte Generator shall provide information on values of system constants. The values
are part of the input information and need to be collected and copied into a dedicated
artifact to be delivered with the McSupportData.
[SWS_Rte_05168] d The Rte Generator in generation phase shall create an elements
of type SwSystemconstantValueSet and create copies of all system constant val-
ues found in the input information of type SwSystemconstValue where the refer-
enced SwSystemconst element has the swCalibrationAccess set to readOnly.
c(SRS_Rte_00153, SRS_Rte_00191)
In case the SwSystemconstValue is subject to variability and the variability can be
resolved during Rte generation phase
[SWS_Rte_05176] d If a SwSystemconst with swCalibrationAccess set to
readOnly has an assigned SwSystemconstValue which is subject to variabil-
ity with the latest binding time SystemDesignTime or CodeGenerationTime
the related SwSystemconstValue copy in the SwSystemconstantValueSet ac-
cording to [SWS_Rte_05168] shall contain the resolved value. c(SRS_Rte_00153,
SRS_Rte_00191)
[SWS_Rte_05174] d If a SwSystemconst with swCalibrationAccess set to
readOnly has an assigned SwSystemconstValue which is subject to variability with
the latest binding time PreCompileTime the related SwSystemconstValue copy
in the SwSystemconstantValueSet according to [SWS_Rte_05168] shall have an
AttributeValueVariationPoint. The PreBuild conditions of the Attribute-
ValueVariationPoint shall correspond to the PreBuild conditions of the input
SwSystemconstValues conditions. c(SRS_Rte_00153, SRS_Rte_00191)
[SWS_Rte_05169] d The Rte Generator in generation phase shall create a reference
from the McSupportData element ([SWS_Rte_05118]) to the SwSystemconstant-
ValueSet element ([SWS_Rte_05168]). c(SRS_Rte_00153, SRS_Rte_00191)
In case the RTE Generator implements variability on a element which is accessible by
a MCD system the related existence condition has to be documented in the McSup-
portData structure as well.
[SWS_Rte_05175] d If an element in the McSupportData is related to an element
in the input configuration which is subject to variability with the latest binding time
PreCompileTime or PostBuild the RTE Generator shall add a VariationPoint for
such element. The PreBuild and PostBuild conditions of the VariationPoint shall
correspond to the PreBuild and PostBuild conditions of the input elements conditions.
c(SRS_Rte_00153, SRS_Rte_00191)
4.2.9.1 General
There are different methods available for AUTOSAR SW-Cs to access data stored in
NVRAM.
    Calibration data  Calibrations can be stored in NVRAM, but are not modified
     during a "normal" execution of the ECU. Calibrations are usually directly read from
     their memory location, but can also be read from a RAM buffer when the access
     time needs to be optimized (e.g. for interpolation tables). They are described in
     section 4.2.8.
    Access to NVRAM blocks  This method uses PerInstanceMemory as a
     RAM Block for the NVRAM blocks. While this method is efficient, its use is
     restricted.
        The NVRAM Manager [21] is a BSW module which provides services for SW-C
        to access NVRAM Blocks during runtime. The NVM block data is not accessed
        directly, but through a RAM Block, which can be a PerInstanceMemory in-
        stantiated by the RTE, or a SW-C internal buffer. When this method is used, the
        RTE does not provide any data consistency mechanisms (i.e. different runnables
        from the SW-C and the NVM can access the RAM Block concurrently without
        being protected by the RTE).
        Note:
        This mechanism permits efficient usage of NVRAM data, but requires the SW-C
        designer to take care that accesses to the PerInstanceMemory from different
        task contexts dont cause data inconsistencies. The Access to NVRAM blocks
        should not be used in multi core environments. In AUTOSAR release 4.0, it can
        not be expected that the NVRAM Manager can access the PerInstanceMem-
        ory of another core. The presence of a shared memory section is not required by
        AUTOSAR. Only in the case of arTypedPerInstanceMemory, a SwDataDef-
        Props item is available to assign the PerInstanceMemory to a shared memory
        section.
    Access to NVRAM data with a NvBlockSwComponentType  The data is ac-
     cessed through a NvDataInterface connected to a NvBlockSwComponent-
     Types. This access is modeled at the VFB level, and, when necessary, protected
     by the RTE against concurrent accesses. It will be described further in this sec-
     tion.
Please note that the terms NVRAM Block, NV Block, RAM Block, ROM Block and
RAM mirror used in this document are defined in the specification of the NVRAM
Manager [21].
                                                      AtomicSwComponentType
                                                  NvBlockSwComponentType
                                                                                               atpVariation Tags:
                                                                                               vh.latestBindingTime =
                                                                                               preCompileTime
atpVariation,atpSplitable
+nvBlockDescriptor 0..*
                                                                                                                        AtpStructureElement
                                                                                                                                 Identifiable
                                                                NvBlockDescriptor
+ period :TimeValue
ValueSpecification
+nvBlockNeeds 1
                                                      ServiceNeeds                        enumeration
                           NvBlockNeeds                                             NvBlockNeedsReliabilityEnum
                                                                                                                                                                                                                                                                           ARElement
                                                                                                                                                                                                                                                                             AtpType
                                                                                                                                                                                                      AutosarDataType
                                                                                                                                                    +type    1
                                                                                                                                                             {redefines atpType}
                                                                                                                                                     isOfType
                                                                                                                                                                                                             +targetDataPrototype
                                                                                                                                                                                              0..1
                                                                                                                                                                                                                                      1
                                                                                                      {subsets atpContextElement}
                                                                                                                             0..1
                                                                       +rootVariableDataPrototype
+contextDataPrototype
                                                                                                                                                                                                                                                                             {ordered}
                                                                                                                                                                                                                                                                                   0..*
                                                                                                                                                              +rootVariableDataPrototype
                 atpVariation Tags:
                 vh.latestBindingTime =
                 preCompileTime
                                       atpVariation
                                                                                                                                      AtpInstanceRef
                                                                                                                                                                                              ArVariableInImplementationDataInstanceRef
                                                          VariableInAtomicSWCTypeInstanceRef
atpVariation
+instantiationDataDefProps 0..*
                     InstantiationDataDefProps                                                                                                      AutosarVariableRef
                                                            +variableInstance
0..1
   1..*    +nvBlockDataMapping
                                                         +writtenReadNvData
          NvBlockDataMapping
                                                                                                    0..1
+writtenNvData
                                                                         0..1
                                                                 +readNvData
0..1
+nvRamBlockElement
[SWS_Rte_03866] d The RTE Generator shall reject any configuration that violates
[constr_1395], [constr_1403] and [constr_1404]. c(SRS_Rte_00018)
[SWS_Rte_07621] d The RTE Generator shall reject configurations where [con-
str_2013] or [constr_1285] is violated. c(SRS_Rte_00018)
Note: This is required to ensure that the default values in romBlock are structurally
matching data in the ramBlock and therefore can be copied to the ramBlock in case
that the callback Rte_NvMNotifyInitBlock of the related NvBlock is called.
[SWS_Rte_07343] d The RTE Generator shall reject configurations where a Vari-
ableDataPrototype instance in the role ramBlock is accessed by SW-C instances
of different partitions. c(SRS_Rte_00177, SRS_Rte_00018)
The rational for [SWS_Rte_07343] is to allow the implementation of cleanup activities
in case of termination or restart of a partition. These cleanup activities may require to
invalidate the RAM Block or reload data from the NVRAM device, which would impact
other partitions if a the ramBlock is accessed by SW-Cs of different partitions.
A NvBlockSwComponentType can be used to reduce the quantity of NVRAM Blocks
needed on an ECU:
    the same block can be used to store different flags or other small data elements;
    the same data element can be used by different SW-Cs or different instances of
     a SW-C.
It also permits to simplify processes and algorithms when it must be guaranteed that
two SW-Cs of an ECU use the same NVRAM data.
Note: this feature can increase the RAM usage of the ECU because it forces the
NVRAM Manager to instantiate an additional RAM buffer, called RAM mirror. How-
ever, when the same data elements have to be shared between SW-Cs, it reduces the
number of RAM Blocks needed to be instantiated by the RTE, and can reduce the
overall RAM usage of the ECU.
[SWS_Rte_07356] d The RTE Generator shall reject configurations where a Vari-
ableDataPrototype referenced by a NvDataInterface has a queued swIm-
plPolicy. c(SRS_Rte_00018)
[SWS_Rte_CONSTR_09011] NvMBlockDescriptor related to a RAM Block of
a NvBlockSwComponentType shall use NvmBlockUseSyncMechanism d The
NVRAM Block associated to the NvBlockDescriptors of a NvBlockSwCompo-
nentType shall be configured with the NvMBlockUseSyncMechanism feature en-
abled, and the NvMWriteRamBlockToNvCallback and NvMReadRamBlockFrom-
NvCallback parameters set to the Rte_GetMirror and Rte_SetMirror API of
the NvBlockDescriptor. c()
An NvBlockSwComponentType may have unconnected p-ports or r-ports (see
[SWS_Rte_01329]).
ule in the cycle of a periodic activity after the data accessed by the Rte_IWrite /
Rte_IWriteRef functions is written back from the preemption area buffer to the RAM
Block(s) (for further details see chapter 4.3.1.5.1). The periodic activity shall be imple-
mented in the context of an NvBlockDescriptors RunnableEntity (see require-
ments [SWS_Rte_08086], [SWS_Rte_08087], [SWS_Rte_08088], [SWS_Rte_08089],
[SWS_Rte_08090]) according to the cycle period defined in the attribute NvBlockDe-
scriptor.timingEvent.period. c(SRS_Rte_00177, SRS_Rte_00245)
[SWS_Rte_08084] d If an AtomicSwComponentType using a PortPrototype
with an NvDataInterface invokes the explicit API Rte_Write and the at-
tributes NvBlockDescriptor.dirtyFlagSupport and NvBlockNeeds.storeIm-
mediate are set to true, the RTE shall write the associated RAM Block(s) to
NV memory by calling the NvM_WriteBlock function of the NvM module. The
NvM_WriteBlock function shall be called in the context of an NvBlockDescrip-
tors RunnableEntity (see requirements [SWS_Rte_08086], [SWS_Rte_08087],
[SWS_Rte_08088], [SWS_Rte_08089], [SWS_Rte_08090]) after the data accessed
by the Rte_Write function is written back to the RAM Block(s). c(SRS_Rte_00177,
SRS_Rte_00245)
[SWS_Rte_08085] d If an AtomicSwComponentType using a PortPrototype with
an NvDataInterface invokes the implicit APIs Rte_IWrite / Rte_IWriteRef
and the attributes NvBlockDescriptor.dirtyFlagSupport and NvBlock-
Needs.storeImmediate are set to true, the RTE shall write the associated
RAM Block(s) to NV memory by calling the NvM_WriteBlock function of the
NvM module. The function NvM_WriteBlock shall be called in the context of
an NvBlockDescriptors RunnableEntity (see requirements [SWS_Rte_08086],
[SWS_Rte_08087], [SWS_Rte_08088], [SWS_Rte_08089], [SWS_Rte_08090]) after
the data accessed by the Rte_IWrite / Rte_IWriteRef functions is written back
from the preemption area buffer to the RAM Block(s) (for further details see chapter
4.3.1.5.1). c(SRS_Rte_00177, SRS_Rte_00245)
Note: Notifications received from the NVM module (e.g. NvMNotifyJobFinished)
will not be forwarded to the SW-Cs by the dirty flag mechanism. The standardized
NvM Client-Server interfaces can be used (see chapter 4.2.9.3.2) if a SW-C needs to
be informed regarding the NvM job result.
The NvBlockSwComponentType can also have ports used for NV data management
and typed by Client-Server interfaces derived from the NVRAM Manager [21] stan-
dardized ones. Note that these ports shall always have a PortInterface with the
attribute isService set to FALSE. The definition of blueprints for these interfaces can
be found in document MOD_GeneralBlueprints [22] in the ARPackage AUTOSAR/N-
vBlockSoftwareComponentType/ClientServerInterfaces_Blueprint.
The standardized NvM Client-Server interfaces are composed as follows:
    NvMService
      This interface is used to send commands to the NVM. The NvBlockSwCompo-
      nentType provides a server port intended to be used by the SW-C users of this
      NvBlockSwComponentType.
    NvMNotifyJobFinished
      This interface is used by the NVM to notify the end of job. The NvBlockSwCom-
      ponentType provides a server port intended to be used by the NVM, and client
      ports intended to be connected to the SW-C users of this NvBlockSwCompo-
      nentType.
    NvMNotifyInitBlock
      This interface is used by the NVM to request users to provide the default values
      in the RAM Block. The NvBlockSwComponentType provides a server port
      intended to be used by the NVM, and client ports intended to be connected to the
      SW-C users of this NvBlockSwComponentType.
    NvMAdmin
      This interface is used to order some administrative operations to the NVM. The
      NvBlockSwComponentType provides a server port intended to be used by the
      SW-C users of this NvBlockSwComponentType.
For the implementation of NvBlockSwComponentTypes that have NvM service ports
the RTE has to call the API of NvM. In order to access NvM API the NvM.h file has to
be included.
[SWS_Rte_08063] d The RTE shall include the NvM.h file, if it has to access NvM API.
c(SRS_Rte_00177)
Note: no restrictions have been added to the NVM interfaces. However, some op-
erations of the NVM might require cooperation between the different users of the
NvBlockSwComponentType. For example, a ReadBlock operation will overwrite the
RAM Block, which might affect multiple SW-Cs.
                                            NvBlockSwComponentType
                                                                                                                                       ARElement
                                                                                                                                      AtpBlueprint
                                                                                                                                  AtpBlueprintable
                                                                                                                                          AtpType
                                                                                                                  PortInterface
                                            atpVariation,atpSplitable
                                      +nvBlockDescriptor    0..*                                   ClientServerInterface
                                                   AtpStructureElement
   atpVariation,atpSplitable                              Identifiable
                                            NvBlockDescriptor
                                                                                                                                  atpVariation Tags:
                                  +    supportDirtyFlag :Boolean [0..1]                              atpVariation               vh.latestBindingTime =
                                                                                                  +operation 1..*                 blueprintDerivationTim
                                                                                                                                  e
                         atpVariation Tags:                                                           AtpStructureElement
                         vh.latestBindingTime =                                                                  Identifiable
                                                       atpVariation
                         preCompileTime                                                            ClientServerOperation
                                            +clientServerPort 0..*
                                                                                                  +operation
                                                  RoleBasedPortAssignment
                                                                                                       instanceRef
                                            +   role :Identifier
                         InternalBehavior                   AtpStructureElement
                    SwcInternalBehavior                        ExecutableEntity
                                                           RunnableEntity
                                                                                                              AbstractEvent
                                            atpVariation,atpSplitable                                 AtpStructureElement
                                                                                   +event
                                                                                                        RTEEvent
                                                    atpVariation,atpSplitable           *
                                                                                                                                                             0..1
+portAPIOption PortAPIOption
atpVariation,atpSplitable 0..*
                                                                                                                                  0..*
                                                   atpVariation Tags:                                        +portArgValue      {ordered}
                                                   vh.latestBindingTime =
                                                   preCompileTime                                               PortDefinedArgumentValue
                                                                                    AbstractProvidedPortPrototype                                                               AbstractRequiredPortPrototype
         AtomicSwComponentType
        NvBlockSwComponentType
                                                                                      PPortPrototype                                         PRPortPrototype                                           RPortPrototype
                                                                                                                                                   +providedRequiredInterface
                                               preCompileTime                              isOfType                                                                                                    isOfType
+nvBlockDescriptor      0..*
+providedInterface
                                                                                                                                                                                                                              {redefines atpType}
                                                                                                                 {redefines atpType}
{redefines atpType}
                                                                                                                                                                                                         +requiredInterface
                      AtpStructureElement
                               Identifiable
               NvBlockDescriptor
                                                   atpVariation Tags:
    +    supportDirtyFlag :Boolean [0..1]          vh.latestBindingTime =
                                                   preCompileTime
                                                                                                                                                                                                                              1
                                                                                                                 1
                                                                                                                                                                                 1
             atpVariation                                                                                                                                                                                 ARElement
                                                                                                                                                                                                           AtpBlueprint
  +clientServerPort 0..*                                                                                                                                                                               AtpBlueprintable
                                                                                                                                                                                                               AtpType
                               RoleBasedPortAssignment
                                                                                                                                                PortInterface
    +    role :Identifier
                                                                                      +   isService :Boolean
                                                                                      +   serviceKind :ServiceProviderEnum [0..1]
ClientServerInterface
                                                        atpVariation Tags:
                                                        vh.latestBindingTime =
                                                        blueprintDerivationTim                                                           atpVariation
                                                        e
                                                                                                                            +operation 1..*
                                                                                                                                                                                AtpStructureElement
                                                                                                                                                                                         Identifiable
                                                                                                                                 ClientServerOperation
The requests received from the SW-C side are forwarded by the NvBlockSwCompo-
nentTypes runnables to the NVM module, using the NVM C API indicated by the
RoleBasedPortAssignment. See figure 4.37.
Notifications received from the NVM are forwarded to all the SW-C connected to the no-
tification interfaces of the NvBlockSwComponentType with a RoleBasedPortAs-
signment of the corresponding type. See figure 4.38.
[SWS_Rte_07398] d The RTE Generator shall implement runnables for each con-
nected server port of a NvBlockSwComponentType. c(SRS_Rte_00177)
[SWS_Rte_07399] d The NvBlockSwComponentTypes runnables used as servers
connected to the SW-C shall forward the request to the NVM by calling the associated
NVM API. c(SRS_Rte_00177)
[SWS_Rte_04535] d The return values of NvM APIs NvM_WriteBlock
and  NvM_SetRAMBlockStatus           (See     requirements    [SWS_Rte_08080],
[SWS_Rte_08081], [SWS_Rte_08082], [SWS_Rte_08083], [SWS_Rte_08084],
[SWS_Rte_08085]) called by the RTE shall be ignored. c(SRS_Rte_00177)
[SWS_Rte_08064] d The symbol attribute of RunnableEntitys triggered by an Op-
erationInvokedEvent of NvBlockSwComponentTypes shall be used by the RTE
generator to identify the to be called NvM API function (see [constr_1234] in software
component template [2]). c(SRS_Rte_00177)
The NvBlockSwComponentType may define PortDefinedArgumentValues to
provide the BlockId value in case the NvBlockSwComponentType defines server
ports for the call of NvM services. Till R4.2 this was the only possibility to provide
the BlockId value. But these values are not mandatory any longer and are super-
seded by the configuration of RteNvRamAllocation, see [SWS_Rte_06211] and
[SWS_Rte_06212].
[SWS_Rte_06211] d The RTE generator shall determine the appropriate BlockId
value for the invocation of NvM API functions from the parameter of the NvMBlock-
Descriptor which is mapped via RteNvRamAllocation.RteNvmBlockRef to the
according NvBlockDescriptor. c(SRS_Rte_00177)
Please note: Thereby the relationship of an invocation to a specific NvBlockDe-
scriptor can be determined by following ways:
    NvBlockDescriptor.timingEvent for the cyclic invocation
    NvBlockDescriptor.clientServerPort where attribute role has the value
     NvMService or NvMAdmin. In this case all OperationInvokedEvents ref-
     erencing an operation in such a PPortPrototype are belonging to the
     NvBlockDescriptor.
    VariableDataPrototype instances in AbstractProvidedPortPrototype
     mapped to the NvBlockDescriptor.ramBlock via an NvBlockDataMap-
     ping. In this case all DataReceivedEvents referencing those Variable-
     DataPrototype instances are belonging to the NvBlockDescriptor.
    NvBlockDescriptor.modeSwitchEventTriggeredActivity for the mode
     switch based invocation.
[SWS_Rte_06212] d The RTE generator shall ignore the given PortAPIOp-
tion with PortDefinedArgumentValue applied to a PPortPrototype of a
NvBlockSwComponentType when the BlockId value is determined according
[SWS_Rte_06211]. c(SRS_Rte_00177)
Besides forwarding requests from the SW-C side to the NVM module via NvM ser-
vice ports, the NvBlockSwComponentType also supports the dirty flag mechanism
mentioned in chapter 4.2.9.3.1. In order to realize the behavior of the dirty flag mech-
anism the RTE implements RunnableEntitys for each NvBlockDescriptor that
can be triggered by RTEEvents. Depending on the writing strategy different kind of
RTEEvents will be used for triggering the RunnableEntitys.
The configuration of the NvBlockSwComponentType (i.e. defining RTEEvents for
triggering the RunnableEntitys for the NvBlockDescriptors and mapping of
RTEEvents to tasks) is usually not in the responsibility of the SW-C developer. For
this reason the SW-C developer can provide the required writing strategy in the Swc-
ServiceDependency.serviceNeeds by using the attributes storeAtShutdown,
storeCyclic, cyclicWritingPeriod, storeEmergency and storeImmediate
(for more details see Software Component Template [2]).
[SWS_Rte_08086] d The RTE generator shall implement RunnableEntitys for
each NvBlockDescriptor of an NvBlockSwComponentType with the attribute
dirtyFlagSupport set to true. c(SRS_Rte_00177, SRS_Rte_00245)
[SWS_Rte_08087] d The RunnableEntity of an NvBlockDescriptor shall be ac-
tivated by a TimingEvent if the attribute NvBlockNeeds.storeCyclic is set to
true. c(SRS_Rte_00177, SRS_Rte_00245)
[SWS_Rte_08088] d The RunnableEntity of an NvBlockDescriptor shall be ac-
tivated by a DataReceivedEvent if the attribute NvBlockNeeds.storeAtShut-
down or NvBlockNeeds.storeImmediate is set to true. c(SRS_Rte_00177,
SRS_Rte_00245)
[SWS_Rte_08111] d The RunnableEntity of an NvBlockDescriptor shall be ac-
tivated by a SwcModeSwitchEvent when the attribute NvBlockDescriptor.mod-
eSwitchEventTriggeredActivity exists. c(SRS_Rte_00177, SRS_Rte_00245)
[SWS_Rte_08089] d For NvBlockDescriptors which need to combine several writ-
ing strategies, i.e. several NvBlockNeeds attributes referring to a writing strategy
are set to true, the RunnableEntity of the NvBlockDescriptor shall be acti-
vated by one TimingEvent or DataReceivedEvent per writing strategy according
to the requirements [SWS_Rte_08087] and [SWS_Rte_08088]. c(SRS_Rte_00177,
SRS_Rte_00245)
[SWS_Rte_08090] d If no RteEventToTaskMapping is defined for DataRe-
ceivedEvents or SwcModeSwitchEvents which are responsible for activat-
ing RunnableEntitys of NvBlockDescriptors (see [SWS_Rte_08087] and
[SWS_Rte_08088]), the according activities shall be processed in the RTE code is-
suing the DataReceivedEvents or SwcModeSwitchEvents. For explicit communi-
cation this shall be done in the related Rte_Write function and for implicit commu-
nication in the task bodies where the preemption buffers are handled. For SwcMod-
eSwitchEvents using asynchronous mode switch procedure, this shall be done in
the related Rte_Switch function.
4.3.1 Sender-Receiver
4.3.1.1 Introduction
The RTE supports multiple receive modes for passing data to receivers. The four
possible receive modes are:
    Implicit data read access  when the receivers runnable executes it shall
     have access to a copy of the data that remains unchanged during the execution
     of the runnable.
        [SWS_Rte_06000] d For data elements specified with implicit data read access,
        the RTE shall make the receive data available to the runnable through the se-
        mantics of a copy. c(SRS_Rte_00128, SRS_Rte_00019)
        [SWS_Rte_06001] d For data elements specified with implicit data read ac-
        cess the receive data shall not change during execution of the runnable. c
        (SRS_Rte_00128)
      When implicit data read access is used the RTE is required to make the data
      available as a copy. It is not necessarily required to use a unique copy for each
      runnable. Thus the RTE may use a unique copy of the data for each runnable
      entity or may, if several runnables (even from different components) need the
      same data, share the same copy between runnables. Runnable entities can only
      share a copy of the same data when the scheduling structure can make sure the
      contents of the data is protected from modification by any other party.
      [SWS_Rte_06004] d The RTE shall read the data elements specified with im-
      plicit data read access before the associated runnable entity is invoked. c
      (SRS_Rte_00128)
      Composite data types shall be handled in the same way as primitive data types,
      i.e. RTE shall make a copy available for the RunnableEntity.
      [SWS_Rte_06003] d The implicit data read access receive mode shall be valid
      for all categories of runnable entity (i.e. 1A, 1B and 2). c(SRS_Rte_00134)
    Explicit data read access  the RTE generator creates a non-blocking API
     call to enable a receiver to poll (and read) data. This receive mode is an explicit
     mode since an explicit API call is invoked by the receiver.
      The explicit data read access receive mode is only valid for category 1B or 2
      runnable entities [SRS_Rte_00134].
    wake up of wait point  the RTE generator creates a blocking API call that the
     receiver invokes to read data.
      [SWS_Rte_06002] d The wake up of wait point receive mode shall support a
      time-out to prevent infinite blocking if no data is available. c(SRS_Rte_00109,
      SRS_Rte_00069)
      The wake up of wait point receive mode is inherently only valid for a category 2
      runnable entity.
      A category 2 runnable entity is required since the implementation may need to
      suspend execution of the caller if no data is available.
    activation of runnable entity  the receiving runnable entity is invoked auto-
     matically by the RTE whenever new data is available. To access the new data, the
     runnable entity either has to use implicit data read access or explicit data read
     access, i.e. invoke an Rte_IRead, Rte_Read, Rte_DRead or Rte_Receive
     call, depending on the input configuration. This receive mode differs from im-
     plicit data read access since the receiver is invoked by the RTE in response to a
     DataReceivedEvent.
      [SWS_Rte_06007] d The activation of runnable entity receive mode shall be
      valid for category 1A, 1B and 2 runnable entities. c(SRS_Rte_00134)
The validity of receive modes in conjunction with different categories of runnable entity
is summarized in Table 4.10.
The category of a runnable entity is not an inherent property but is instead determined
by the features of the runnable. Thus the presence of explicit API calls makes the
runnable at least category 1B and the presence of a WaitPoint forces the runnable
to be category 2.
4.3.1.2.1 Applicability
The different receive modes are not just used for receivers in sender-receiver commu-
nication. The same semantics are also applied in the following situations:
    Success feedback  The mechanism used to return transmission acknowledg-
     ments to a component. See Section 5.2.6.9.
    Asynchronous client-server result  The mechanism used to return the result
     of an asynchronous client-server call to a component. See Section 5.7.5.4.
The following list serves as a reference for how the RTE Generator determines the
Receive Mode from its input [SRS_Rte_00109]. Note that references to the Vari-
ableDataPrototype within this sub-section will implicitly mean the Variable-
DataPrototype for which the API is being generated.
    wake up of wait point  A VariableAccess in the dataReceivePointBy-
     Value or dataReceivePointByArgument role references a VariableDat-
     aPrototype and a WaitPoint references a DataReceivedEvent which in
     turn references the same VariableDataPrototype.
    activation of runnable entity  a DataReceivedEvent references the Vari-
     ableDataPrototype and a runnable entity to start when the data is received.
    explicit data read access  A VariableAccess in the dataReceive-
     PointByValue or dataReceivePointByArgument role references the
     VariableDataPrototype.
    implicit data read access  A VariableAccess in the dataReadAccess
     role references the VariableDataPrototype.
A sender-receiver interface can contain one or more data elements. The transmission
and reception of elements is independent  each data element, e.g. AUTOSAR signal,
can be considered to form a separate logical data channel between the provide port
and a require port.
[SWS_Rte_06008] d Each data element in a sender-receiver interface shall be sent
separately. c(SRS_Rte_00089)
Example 4.4
Consider an interface that has two data elements, speed and freq and that a compo-
nent template defines a provide port that is typed by the interface. The RTE generator
will then create two API calls; one to transmit speed and another to transmit freq.
Where it is important that multiple data elements are sent simultaneously they should
be combined into a composite data structure (Section 4.3.1.11.1). The sender then
creates an instance of the data structure which is filled with the required data before
the RTE is invoked to transmit the data.
[SWS_Rte_06009] d For each data element in an interface specified with data se-
mantics, the RTE shall support the initValue attribute. c(SRS_Rte_00108)
The initValue attribute is used to ensure that AUTOSAR software-components al-
ways access valid data even if no value has yet been received. This information is re-
quired for inter-ECU, inter-Partition, and intra-Partition communication. For inter-ECU
communication initial values can be handled by COM but for intra-ECU communication
RTE has to guarantee that initValue is handled.
In general, the specification of an initValue is mandatory for each data element
prototype with data semantics, see [SWS_Rte_07642]. If all senders and receivers
are located in the same partition, this restriction is relaxed, see [SWS_Rte_04501].
[SWS_Rte_06010] d The RTE shall use any specified initial value to prevent the
receiver performing calculations based on invalid (i.e. uninitialized) values when
the swImplPolicy is not queued and if the general initialization conditions in
[SWS_Rte_07046] are fulfilled. c(SRS_Rte_00107)
The above requirement ensures that RTE API calls return the initialized value until a
real value has been received, possibly via the communication service. The require-
ment does not apply when event semantics are used since the implied state change
when the event data is received will mean that the receiver will not start to process
invalid data and would therefore never see the initialized value.
[SWS_Rte_04500] d An initial value cannot be specified when the implementation pol-
icy is set to queued attribute is specified as true. c(SRS_Rte_00107)
For senders, an initial value is not used directly by the RTE (since an AUTOSAR SW-C
must supply a value using Rte_Send) however it may be needed to configure the com-
munication service - for example, an un-initialised signal can be transmitted if multiple
signals are mapped to a single frame and the communication service transmits the
whole frame when any contained signal is sent by the application. Note that it is not
the responsibility of the RTE generator to configure the communication service.
It is permitted for an initial value to be specified for either the sender or receiver. In this
case the same value is used for both sides of the communication.
[SWS_Rte_04501] d If in context of one partition a sender specifies an initial value and
the receiver does not (or vice versa) the same initial value is used for both sides of the
communication. c(SRS_Rte_00108)
It is also permitted for both sender and receiver to specify an initial value. In this case
it is defined that the receivers initial value is used by the RTE generator for both sides
of the communication.
[SWS_Rte_04502] d If in context of one partition both receiver and sender specify an
initial value the specification for the receiver takes priority. c(SRS_Rte_00108)
[SWS_Rte_06011] d The RTE shall support explicit and implicit data recep-
tion and transmission. c(SRS_Rte_00019, SRS_Rte_00098, SRS_Rte_00129,
SRS_Rte_00128, SRS_Rte_00141)
Implicit data access transmission means that a runnable does not actively initiate the
reception or transmission of data. Instead, the required data is received automatically
when the runnable starts and is made available for other runnables at the earliest when
it terminates.
Explicit data reception and transmission means that a runnable employs an explicit
API call to send or receive certain data elements. Depending on the category of the
runnable and on the configuration of the according ports, these API calls can be either
blocking or non-blocking.
4.3.1.5.1 Implicit
Implicit Read
For the implicit reading of data, VariableAccesses aggregated with a dataReadAc-
cess role [SRS_Rte_00128], the data is made available when the runnable starts us-
ing the semantics of a copy operation and the RTE ensures that the copy will
not be modified until the runnable terminates.
If data transformation shall be executed for this data element, the data transformation
takes place after reception of the data from the Com stack and before start of the
runnable execution. (See [SWS_Rte_08570], [SWS_Rte_08108])
When a runnable R is started, the RTE reads all VariableDataPrototypes refer-
enced by a VariableAccess in the dataReadAccess role, if the data elements may
be changed by other runnables a copy is created that will be available to runnable R.
The runnable R can read the data element by using the RTE APIs for implicit read
(see the API description in Section 5.6.18). That way, the data is guaranteed not to
change (e.g. by write operations of other runnables) during the entire lifetime of R. If
several runnables (even from different components) need the data, they can share the
same buffer. This is only applicable when the scheduling structure can make sure the
contents of the data is protected from modification by any other party.
Note that this concept implies that the runnable does in fact terminate. Therefore, while
implicit read is allowed for category 1A and 1B runnable entities as well as category 2
only the former are guaranteed to have a finite execution time. A category 2 runnable
that runs forever will not see any updated data.
VariableAccess in the dataReadAccess role is only allowed for VariableDat-
aPrototypes with their swImplPolicy different from queued ([constr_2020]).
Implicit Write
Implicit writing, VariableAccesses aggregated with a dataWriteAccess role
[SRS_Rte_00129], is the opposite concept. VariableDataPrototypes referenced
by a VariableAccess in the dataWriteAccess role are sent by the RTE after the
runnable terminates. The runnable can write the data element by using the RTE APIs
for implicit write (see the API description in Sect. 5.6.19 and 5.6.20). The sending is
independent from the position in the execution flow in which the Rte_IWrite is per-
formed inside the Runnable. When performing several write accesses during runnable
execution to the same data element, only the last one will be recognized. Here we
have a last-is-best semantics.
If data transformation shall be executed for this data element, the data transformation
takes place after termination of the runnable and before sending the data to the Com
stack. (See [SWS_Rte_08571], [SWS_Rte_08109])
[SWS_Rte_08418] d The content of a preemption area specific buffer which is used
exclusively for an implicit write access to a VariableDataPrototype shall
be initialized by the generated RTE with a copy of the global buffer between the be-
ginning of the task and the execution of the first RunnableEntity with access to this
VariableDataPrototype in the task. c(SRS_Rte_00129)
Note:
[SWS_Rte_08418] ensures that no undefined values are written back to a preemp-
tion area specific buffer at runnable termination if a VariableDataPrototype is
referenced by a VariableAccess in the dataWriteAccess role and no RTE API
for implicit write of this VariableDataPrototype is called during an execution of the
Runnable. For the first entry to the preemption area the "global buffer" will contain
the initValue of the VariableDataPrototype (if no initValue is configured
then the value will depend on the initialization strategy of the startup code). For sec-
ond and subsequent entries the "global buffer" will contain the previously written value
(if any).
[SWS_Rte_03570] d For VariableAccesses in the dataWriteAccess role the RTE
shall make the sent data available to others (other runnables, other AUTOSAR SWCs,
Basic SW, ..) with the semantics of a copy. c(SRS_Rte_00129)
[SWS_Rte_03571] d For VariableAccesses in the dataWriteAccess role the RTE
shall make the sent data available to others (other runnables, other AUTOSAR SWCs,
Basic SW, ..) at the earliest when the runnable has terminated. c(SRS_Rte_00129)
AUTOSAR releases. With this means a backward compatible bahavior of the RTE can
be ensured.
Please note that [SWS_Rte_03955] applies as well for coherent implicit data access.
[SWS_Rte_07062] includes already that a single shared read/write buffer shall be used
when no runnable entity has coherent implicit read access and coherent
implicit write access belonging to the same coherency group.
Implicit Communication buffer handling
The preemption area specific buffer should not be updated or made available more
often than required. The following requirements detail how to obtain that for read and
write access.
[SWS_Rte_03956] d The content of a preemption area specific buffer used for an
incoherent implicit read access to a data element shall be filled with actual
data by a copy action between the beginning of the task and the execution of the first
RunnableEntity with access to this data element in the task. c(SRS_Rte_00128)
[SWS_Rte_07020] d If the RteImmediateBufferUpdate = TRUE is configured for a
incoherent implicit read access to a data element the content of a preemp-
tion area specific buffer used for that VariableAccess shall be filled with actual
data by a copy action immediately before the RunnableEntity with the related im-
plicit read access to the data element starts. c(SRS_Rte_00128)
[SWS_Rte_07041] d The content of a separate write buffer (see [SWS_Rte_03955])
modified by a incoherent implicit write access of a RunnableEntity
shall be made available to RunnableEntitys using a implicit read access
allocated in the same preemption area immediately after the execution of the
RunnableEntity with the related implicit write access to the data element.
c(SRS_Rte_00129)
[SWS_Rte_03957] d The content of a preemption area specific buffer modified by
a incoherent implicit write access in one task shall be made available to
RunnableEntitys using an implicit read access allocated in other preemp-
tion areas at latest after the execution of the last RunnableEntity mapped to the
task. c(SRS_Rte_00129)
[SWS_Rte_07021] d If the RteImmediateBufferUpdate = TRUE is configured for a
incoherent implicit write access the content of a preemption area spe-
cific buffer shall be made available to RunnableEntitys using a implicit read
access allocated in other preemption areas immediately after the execution of the
RunnableEntity with the related implicit write access to the data element.
c(SRS_Rte_00129)
Note:
Its the semantic of implicit communication that a VariableAccess in the
dataWriteAccess role is interpreted as writing the whole dataElement.
Explicit Schedule Points defined by RteOsSchedulePoints are placed be-
tween RunnableEntitys after the data written with implicit write access by the
after the execution of the last RunnableEntity with a coherent implicit write
access belonging to this coherency group c(SRS_Rte_00129)
Handling of ConsistencyNeeds
ConsistencyNeeds are not directly processed by the RTE Generator but provid-
ing an important information for the correct configuration of the RTE and OS with
respect to preemption, RteEventToTaskMapping and RteImplicitCommunica-
tion. Therefore following constraints apply:
[SWS_Rte_CONSTR_09001] Whole DataPrototypeGroup in role dpgRe-
quiresCoherency shall be propagated coherently d
All RunnableEntitys in a RunnableEntityGroup with dataWriteAccess to
data belonging to the same DataPrototypeGroup in the role dpgRequiresCo-
herency shall
       Be mapped to the same OS Task
          AND shall
       A) either be scheduled in a way that these RunnableEntitys can not be inter-
        rupted by RunnableEntitys with dataReadAccess to (more than one) data
        belonging to the DataPrototypeGroup.
       B) or the RteImplicitCommunication shall be configured to ensure a coher-
        ent propagation (RteCoherentAccess == true) for reading RunnableEntitys
        4
          .
c()
Please note that the interruption of RunnableEntitys and between RunnableEn-
titys depends from many factors like the configuration of the OS and the configura-
tion of the RTE (e.g. RteOsSchedulePoint).
[SWS_Rte_CONSTR_09002] The whole DataPrototypeGroup shall be read sta-
ble for the whole RunnableEntityGroup in the role regRequiresStability
d.
All RunnableEntitys with dataReadAccess to data belonging to the same Dat-
aPrototypeGroup and which are belonging to the same RunnableEntityGroup
in the role regRequiresStability shall
       either be configured in a way that the chain of RunnableEntitys with
        dataReadAccess to the data of the DataPrototypeGroup can not be inter-
        rupted by any of the RunnableEntity(s) with dataWriteAccess to data of
        the DataPrototypeGroup
      4
   RunnableEntitys with have as well dataWriteAccess to data belonging to the DataProto-
typeGroup are excluded because inside the calculation chain the latest data values are visible
Example 4.5
Example 4.6
RteImplicitCommunication "CN_BC_B":
    RteVariableReadAccessRef referencing "DRP_ASWC_B_RUN1_B_B"
    RteVariableReadAccessRef referencing "DRP_ASWC_C_RUN1_B_B"
    RteCoherentAccess = true
"ASWC_B_RUN1_A_A" and "ASWC_C_RUN1_A_A" as well as "ASWC_B_RUN1_B_B"
and "ASWC_C_RUN1_B_B" are in the same coherency group. Therefore the read
data values for "A" and "B" are from the same age in one execution of OsTask
T100MS for ASWC_B_RUN1 and ASWC_C_RUN1.
Please note, since it is not requested that data "A" and "B" are communicated coher-
ently the setup of RteImplicitCommunication for "A" and "B" can be handled
independently from each other. In particular if there a further RunnableEntitys with
dataReadAccesses to "A" or "B" mapped to the OsTask T100MS the buffers for
"A" and "B" can be loaded at different points in the execution sequence. Further on
it is not requested that "A" and "B" is produced in the same recurrence as it is show
in this example.
Example 4.7
4.3.1.5.2 Explicit
The behavior of explicit reception depends on the category of the runnable and on the
configuration of the according ports.
An explicit API call can be either non-blocking or blocking. If the call is non-blocking
(i.e. there is a VariableAccess in the dataReceivePointByValue or dataRe-
ceivePointByArgument role referencing the VariableDataPrototype for which
the API is being generated, but no WaitPoint referencing a DataReceivedEvent
which references the VariableDataPrototype for which the API is being gener-
ated), the API call immediately returns the next value to be read and, if the communi-
cation is queued (event reception), it removes the data from the receiver-side queue,
see Section 4.3.1.10
[SWS_Rte_06012] d A non-blocking RTE API read call shall indicate if no data is
available. c(SRS_Rte_00109)
In contrast, a blocking call (i.e. the VariableDataPrototype, referenced by a
VariableAccess in the role dataReceivePointByArgument, and for which the
API is being generated, is referenced by a DataReceivedEvent which is itself refer-
enced by a WaitPoint) will suspend execution of the caller until new data arrives (or
a timeout occurs) at the according port. When new data is received, the RTE resumes
the execution of the waiting runnable. ([SRS_Rte_00092])
To prevent infinite waiting, a blocking RTE API call can have a timeout applied. The RTE
monitors the timeout and if it expires without data being received returns a particular
error status.
[SWS_Rte_06013] d A blocking RTE API read call shall indicate the expiry of a time-
out. c(SRS_Rte_00069)
The timeout expired indication also indicates that no data was received before the
timeout expired.
Blocking reception of data (wake up of wait point receive mode as described in Sec-
tion 4.3.1.2) is only applicable for category 2 runnables whereas non-blocking reception
(explicit data read access receive mode) can be employed by runnables of category
2 or 1B. Neither blocking nor non-blocking explicit reception is applicable for category
1A runnable because they must not invoke functions with unknown execution time (see
table 4.10).
[SWS_Rte_06016] d The RTE API call for explicit sending (VariableAccessin the
dataSendPoint role, [SRS_Rte_00098]) shall be non-blocking. c(SRS_Rte_00098)
Using this API call, the runnable can explicitly send new values of the VariableDat-
aPrototype.
Explicit writing is valid for runnables of category 1b and 2 only. Explicit writing is not al-
lowed for a category 1A runnable since these require API calls with constant execution
time (i.e. macros).
Although the API call for explicit sending is non-blocking, it is possible for a cate-
gory 2 runnable to block waiting for a notification whether the (explicit) send oper-
ation was successful. This is specified by the AcknowledgementRequest attribute
and occurs by a separate API call Rte_Feedback. If the feedback method is
wake_up_of_wait_point, the runnable will block and be resumed by the RTE either
when a positive or negative acknowledgment arrives or when the timeout associated
with the WaitPoint expires.
Tables 4.11 and 4.12 summarize the characteristics of implicit versus explicit data re-
ception and transmission.
            Implicit Read                           Explicit Read
            Receiving of data element values is     Runnable decides when and how often
            performed only once when runnable       a data element value is received
            starts
            Values of data elements do not change   Runnable can always decide to receive
            while runnable is running.              the latest value
            Several API calls to the same signal    Several API calls to the same signal
            always yield the same data element      may yield different data element values
            value
            Runnable must terminate (all cate-      Runnable is of cat. 1B or 2
            gories)
In case time-out is enabled on a data element with update bit, there shall
be a separate time-out monitoring for each data element with an update bit
[SWS_Com_00292].
There shall be an I-PDU based time-out for data elements without an update bit
[SWS_Com_00290]. For all data elements without update bits within the same I-PDU,
the smallest configured time-out of the associated data elements is chosen as time-out
for the I-PDU [SWS_Com_00291]. The notification from COM to RTE is performed per
data element.
In case one data element coming from COM needs to be distributed to several
AUTOSAR software-components the AUTOSAR Software Component Template allows
to configure different aliveTimeout values at each Port. In this case the RTE has to
ensure that the time-out notifications for each port will occur according to the configured
aliveTimeout value in the NonqueuedReceiverComSpec.
[SWS_Rte_08103] d The RTE shall pass time-out notifications to the SW-Cs accord-
ing to the configured aliveTimeout values in the NonqueuedReceiverComSpec.
Depending on the configuration of the COM module following rules shall apply:
    ComSignal.ComTimeout/ComSignalGroup.ComTimeout configured to 0: No
     time-out notifications shall occur.
    ComSignal.ComTimeout/ComSignalGroup.ComTimeout not configured to 0
     (ComSignals/ComSignalGroups with update bits): Time-out notifications shall
     occur according to the greatest multiple of the ComSignal.ComTimeout/Com-
     SignalGroup.ComTimeout value of the associated ComSignal/ComSignal-
     Group lower than or equal to the aliveTimeout value in the Nonqueue-
     dReceiverComSpec.
    I-PDU based time-out not equal to 0 (ComSignals/ComSignalGroups without
     update bits): Time-out notifications shall occur according to the greatest multiple
     of the I-PDU based time-out value lower than or equal to the aliveTimeout
     value in the NonqueuedReceiverComSpec.
c(SRS_Rte_00147)
Following example illustrates how the value of the ComTimeout parameter of a Com-
Signal is derived and the time-out monitoring in RTE is performed in case one data
element coming from COM needs to be distributed to several SW-Cs.
Consider 3 SW-Cs receiving same data element with different aliveTimeout values
specified in the NonqueuedReceiverComSpec:
    SW-C1: aliveTimeout = 500ms
    SW-C2: aliveTimeout = 0ms (or not specified)
    SW-C3: aliveTimeout = 1200ms
The derived ComTimeout value of the ComSignal the data element is mapped to
will be in this case 500ms. I.e. the smallest aliveTimeout value of the associated
SW-Cs (This value must be bigger or equal to the main function cycle of the COM
module).
The RTE will pass time-out notifications to the 3 SW-Cs in case of a reception time-out
indicated by COM as follows:
    SW-C1: directly
    SW-C2: no time-out notification
    SW-C3: after 500ms (i.e. the RTE has to count internally further 500ms before
     notifying SW-C3)
[SWS_Rte_08104] d The RTE shall implement a replacement strategy according to
the handleTimeoutType attribute defined by the NonqueuedReceiverComSpec in
each receiving SWC:
    handleTimeoutType configured to none: SWC observes the latest received
     value.
    handleTimeoutType configured to replace: SWC observes the Nonqueue-
     dReceiverComSpecs initValue.
c(SRS_Rte_00147)
Note:     In the case of receiving SWCs with different handleTimeout-
Type values its expected that the related ComSignal/ComSignalGroup has
attribute ComSignal.ComRxDataTimeoutAction/ComSignalGroup.ComRxData-
TimeoutAction equal to NONE to ensure that the RTE always has access to the
last received value.
The Software Component template allows to specify whether a data element, de-
fined in an AUTOSAR Interface, can be invalidated by the sender. The communication
infrastructure shall provide means to set a data element to invalid and also indicate an
invalid data element to the receiving software components. This functionality is called
data element invalidation. For an overview see figure 4.48.
[SWS_Rte_05024] d If the handleInvalid attribute of the InvalidationPolicy
(when present) is set to keep, replace or externalReplacement the invalidation
support for this dataElement is enabled on sender side. The actual value used to
represent the invalid data element shall be specified in the Data Semantics part of the
data element definition defined in invalidValue6 . c(SRS_Rte_00078)
For data element invalidation, it is intended that the Rte_Invalidate() API is used
by the software component. Nevertheless, passing the invalid value as a parameter
of the Rte_Write() API may intentionally occur. In this case, the handleInvalid
  6
    When InvalidationPolicy is set to keep, replace or externalReplacement but there is
no invalidValue specified it is considered as an invalid configuration.
Sender:
If data element invalidation is enabled and the communication is Inter-ECU:
    explicit data transmission:
           data transformation for this communication enabled: data element invalida-
            tion will be performed by RTE.
dleInvalid and the attribute handleInvalid is set to keep for a particular r-port
 the query of the value shall return for the r-port the same value as if COM would
have handled the invalidation (copy COM behavior). c(SRS_Rte_00078)
[SWS_Rte_08407] d In case of Inter-ECU communication where receiving software
components requesting different values for the attribute handleInvalid and this at-
tribute is set to keep for a particular R-Port, in case of reception of a data element
invalid, the RTE shall raise a DataReceiveErrorEvent. c(SRS_Rte_00078)
[SWS_Rte_07032] d If a data element has been received invalidated in case of Inter-
ECU communication where receiving software components requesting different val-
ues for handleInvalid and the attribute handleInvalid is set to replace for an
particular r-port  RTE shall perform the "invalid value substitution" with the init-
Value for the r-port. Then the reception will be handled as if a valid value would
have been received (activation of runnable entities using the DataReceivedEvent).
c(SRS_Rte_00078)
[SWS_Rte_08049] d If a data element has been received invalidated in case of Inter-
ECU communication and the attribute handleInvalid is set to dontInvalidate 
the query of the value shall return the value provided by COM. Then the reception will
be handled as if a valid value would have been received (activation of runnable entities
using the DataReceivedEvent). c(SRS_Rte_00078)
[SWS_Rte_08099] d If a data element has been received invalidated in case of Inter-
ECU communication and the attribute handleInvalid is set to externalReplace-
ment for all receiving software components  the query of the value shall return the
value sourced from the ReceiverComSpec.replaceWith (e.g. constant, NVRAM
parameter). c(SRS_Rte_00078)
[SWS_Rte_08100] d In case of Inter-ECU communication with the attribute han-
dleInvalid set to externalReplacement for all receiving software components,
in case of reception of a data element invalid, the RTE shall raise a DataReceivedE-
vent as if a valid value would have been received. c(SRS_Rte_00078)
[SWS_Rte_08101] d If a data element has been received invalidated in case of Inter-
ECU communication where receiving software components requesting different values
for handleInvalid and the attribute handleInvalid is set to externalReplace-
ment for an particular r-port  RTE shall perform the "invalid value substitution" with
the value sourced from the ReceiverComSpec.replaceWith for the r-port. Then
the reception will be handled as if a valid value would have been received (activation
of runnable entities using the DataReceivedEvent). c(SRS_Rte_00078)
Sender:
[SWS_Rte_05025] d If data element invalidation is enabled, and the commu-
nication is Intra-ECU, data element invalidation shall be implemented by the RTE. c
(SRS_Rte_00078)
The actual invalid value is specified in the SW-C template invalidValue.
Receiver:
[SWS_Rte_05030] d If a data element has been invalidated in case of Intra-ECU com-
munication and the attribute handleInvalid is set to keep  the query of the value
shall return the same value as if COM would have handled the invalidation (copy COM
behavior). Then the reception of the invalid value will be handled as an error and the ac-
tivation of runnable entities can be performed using the DataReceiveErrorEvent.
c(SRS_Rte_00078)
[SWS_Rte_05049] d If a data element has been received invalidated in case of Intra-
ECU communication and the attribute handleInvalid is set to replace  RTE shall
perform the "invalid value substitution" with the initValue. Then the reception will
be handled as if a valid value would have been received (activation of runnable entities
using the DataReceivedEvent). c(SRS_Rte_00078)
[SWS_Rte_08050] d If a data element has been received invalidated in case of Intra-
ECU communication and the attribute handleInvalid is set to dontInvalidate
 the query of the value shall return the received value. Then the reception will be
handled as if a valid value would have been received (activation of runnable entities
using the DataReceivedEvent). c(SRS_Rte_00078)
[SWS_Rte_02308] d If data invalidation is enabled for a composite VariableDat-
aPrototype, and the communication is Intra-ECU, the RTE shall invalidate all invali-
dateable primitive elements of the VariableDataPrototype. c()
[SWS_Rte_02309] d The RTE generator shall reject configurations which are violating
[constr_1302]. c(SRS_Rte_00078)
[SWS_Rte_08102] d If a data element has been received invalidated in case of Intra-
ECU communication and the attribute handleInvalid is set to externalReplace-
ment  RTE shall perform the "invalid value substitution" with the value sourced from
the ReceiverComSpec.replaceWith (e.g. constant, NVRAM parameter). Then the
reception will be handled as if a valid value would have been received (activation of
runnable entities using the DataReceivedEvent). c(SRS_Rte_00078)
4.3.1.9 Filters
be defined, i.e. only signal values fulfilling certain conditions are made available for the
receiving component. The possible filter algorithms are taken from OSEK COM version
3.0.2. They are listed in the meta model (see [2]. According to the SW-C template [2],
filters are only allowed for signals that are compatible to C language unsigned integer
types (i.e. characters, unsigned integers and enumerations). Thus, filters cannot be
applied to composite data types like for instance ApplicationRecordDataType or
ApplicationArrayDataType.
[SWS_Rte_05503] d The RTE shall provide value-based filters on the receiver-
side of unqueued S/R-Communication as specified in the SW-C template [2]. c
(SRS_Rte_00121)
[SWS_Rte_05500] d For inter-ECU communication, the filter implementation is per-
formed/done by the COM module. For intra-ECU and inter-Partition communication,
the RTE shall perform the filtering itself. c(SRS_Rte_00019, SRS_Rte_00121)
[SWS_Rte_05501] d The RTE shall support a different filter specification for each
dataElement in a components AUTOSAR interface. c(SRS_Rte_00121)
[SWS_Rte_08077] d In case that filtering applies the input value shall be calculated
from the "unfiltered buffer" before the RunnableEntity starts, the result of the filter
calculation shall be stored in a "filtered buffer" and the RunnableEntity accessing
a dataElement in a Receiver Port with a filter shall get access to the "filtered buffer"
instead of the "unfiltered buffer". c(SRS_Rte_00121)
[SWS_Rte_08078] d For optimization reasons no "filtered buffer" should be provided,
if filtering applies for a dataElement and the "unfiltered buffer" is not used at all. The
"unfiltered buffer" should be used for filtering instead. c(SRS_Rte_00121)
[SWS_Rte_08079] d Separate "filtered buffers" shall be provided, if the same
dataElement is accessed by RunnableEntitys via different Receiver Ports and
filters with different semantics are applied in each Port. c(SRS_Rte_00121)
4.3.1.10 Buffering
The use of a single data set provides the required semantics of a single element queue
with overwrite semantics (new data replaces old). Since the RTE is required to ensure
data consistency, the generated RTE should ensure that non-atomic reads and writes
of the data set (e.g. for composite data types) are protected from conflicting concurrent
access. RTE may use lower layers like COM to implement the buffer.
[SWS_Rte_02517] d The RTE shall initialize this data set [SWS_Rte_02516] with a
startup value depending on the ports attributes and if the general initialization condi-
tions in [SWS_Rte_07046] are fulfilled. c(SRS_Rte_00068, SRS_Rte_00108)
[SWS_Rte_02518] d Implicit or explicit read access shall always return the last re-
ceived data. c(SRS_Rte_00107)
Requirement [SWS_Rte_02518] applies whether or not there is a DataReceivedE-
vent referencing the VariableDataPrototype for which the API is being gener-
ated.
[SWS_Rte_02519] d Explicit read access shall be non blocking in the sense that it
does not wait for new data to arrive. The RTE shall provide mutual exclusion of read
and write accesses to this data, e.g., by ExclusiveAreas. c(SRS_Rte_00109)
[SWS_Rte_02520] d When new data is received, the RTE shall silently discard the pre-
vious value of the data, regardless of whether it was read or not. c(SRS_Rte_00107)
The application of event semantics implies a state change. Events usually have
to be handled. In many cases, a loss of events can not be tolerated. Hence the
swImplPolicy is set to queued to indicate that the received events have to be
buffered in a queue.
[SWS_Rte_02521] d The RTE shall implement a receive queue for each event-like data
element (swImplPolicy = queued) of a receive port. c(SRS_Rte_00107)
The queueLength attribute of the QueuedReceiverComSpec referencing the event
assigns a constant length to the receive queue.
[SWS_Rte_02522] d The events shall be written to the end of the queue and read
(consuming) from the front of the queue (i.e. the queue is first-in-first-out). c
(SRS_Rte_00107, SRS_Rte_00110)
[SWS_Rte_02523] d If a new event is received when the queue is already filled,
the RTE shall discard the received event and set an error flag. c(SRS_Rte_00107,
SRS_Rte_00110)
[SWS_Rte_02524] d The error flag described in [SWS_Rte_02523] shall be reset
during the next explicit read access on the queue. In this case, the status value
RTE_E_LOST_DATA shall be presented to the application together with the data. c
(SRS_Rte_00107, SRS_Rte_00110, SRS_Rte_00094)
[SWS_Rte_02525] d If an empty queue is polled, the RTE shall return with a sta-
tus RTE_E_NO_DATA to the polling function, (see chap. 5.5.1). c(SRS_Rte_00107,
SRS_Rte_00110, SRS_Rte_00094)
The minimum size of the queue is 1.
[SWS_Rte_02526] d The RTE generator shall reject a queueLength attribute of
an QueuedReceiverComSpec with a queue length  0. c(SRS_Rte_00110,
SRS_Rte_00018)
4.3.1.11 Operation
[SWS_Rte_04505] d The RTE shall use the ComHandleId of the corresponding Com-
Signal when invoking the COM API for signal. c(SRS_Rte_00091)
The actual COM handle id has to be gathered from the ECU configuration of the COM
module. The input information ComSignalHandleId is used to establish the link
between the ComSignal of the COM modules configuration and the corresponding
ISignal of the System Template.
When a data prototype has a composite data type the RTE must marshall the data.
This can be achieved by two means: Explicit mapping the atomic sub-elements of the
composite type to their own COM signals or mapping of the whole composite type to
one COM signal if data transformation is used.
The DataMappings element of the ECU configuration and configuration of the data
transformer contain (or references) sufficient information to allow the data item or op-
eration parameters to be transmitted by indicating the COM signals or signal groups to
be used. It is not necessary to provide a mapping for each primitive typed leaf element
within the composite type.
[SWS_Rte_03863] d The RTE generator shall support the partial mapping to System-
Signals of the leaf elements of a VariableDataPrototype (typed by a composite data
type) in a PPort. c(SRS_Rte_00091)
A partial mapping means that a subset of the composite data types leaf elements are
mapped to SystemSignals in the relevant SystemSignalGroup (e. g. a record with
leaf elements A, B, C, D where only B and C are mapped to SystemSignals of the
SystemSignalGroup). Elements omitted from the partial mapping are simply ignored
by the RTE generator.
For RPorts it is necessary to define how the RTE generator handles the partial mapping
of a composite data type, in particular, how elements omitted from the mapping are
treated.
[SWS_Rte_03864] d For the included element of a partial mapping from SystemSig-
nals to the leaf elements of a VariableDataPrototype (typed by a composite data type)
in a RPort the RTE generator shall use the data provided by COM. c(SRS_Rte_00091)
[SWS_Rte_03865] d For the omitted elements from a partial mapping from SystemSig-
nals to the leaf elements of a VariableDataPrototype (typed by a composite data type)
in a RPort the RTE generator shall use the initial value when receiving the composite
data type. c(SRS_Rte_00091)
[SWS_Rte_08793] d If a data element is a composite data type, the communication
is inter-ECU and data transformation is used (except COM Based Transformer), the
DataMapping element shall map the composite data type directly to one COM signal
to use the data transformation. c(SRS_Rte_00091, SRS_Rte_00247)
The above requirements for mapping atomic sub-elements for them own to distinct
COM signals have two key features; firstly, COM is responsible for endianness con-
version (if any is required) of primitive types and, secondly, differing structure member
alignment between sender and receiver is irrelevant since the COM signals are packed
into I-PDUs by the COM configuration.
The DataMappings shall contain sufficient COM signals to map each primitive element7
of the AUTOSAR signal.
The above requirements for mapping the whole composite data type to one COM signal
on the other hand leaves those features to the data transformation.
[SWS_Rte_04508] d The RTE generator shall reject configuration violating the con-
straint [constr_3059]. c(SRS_Rte_00091)
[SWS_Rte_02557] d
  1. Each signal that is mapped to an element of the same composite data item shall
     be mapped to the same signal group.
   7
     An AUTOSAR signal that is a primitive data type contains exactly one primitive element whereas a
signal that is a composite data type one or more primitive elements.
  2. If two signals are not mapped to an element of the same composite data item,
     they shall not be mapped to the same signal group.
  3. If a signal is not mapped to an element of a composite data item, it shall not be
     mapped to a signal group.
c(SRS_Rte_00091)
[SWS_Rte_05081] d The RTE shall use the ComHandleId of the corresponding Com-
SignalGroup when invoking the COM API for signal groups. This also applies for
the array based signal group access with the Com_SendSignalGroupArray() and
Com_ReceiveSignalGroupArray(). c(SRS_Rte_00091)
[SWS_Rte_05173] d The RTE shall use the ComHandleId of the corresponding Com-
GroupSignal when invoking the COM API for shadow signals. c(SRS_Rte_00091)
The actual COM handle id has to be gathered from the ECU configuration of the COM
module. The input information ComHandleId is used to establish the link between the
ComSignalGroup of the COM modules configuration and the corresponding ISig-
nalGroup of the System Template.
The input information ComHandleId of shadow signals is used to establish the link be-
tween the ComGroupSignal of the COM modules configuration and the correspond-
ing ISignal of the System Template.
4.3.1.11.2 Atomicity
4.3.1.11.3 Fan-out
Fan-out can be divided into two scenarios; PDU fanout where the same I-PDU is sent
to multiple destinations and signal fan-out where the same signal, i.e. data element is
sent in different I-PDUs to multiple receivers.
For Inter-ECU communication, the RTE does not perform PDU fan-out. Instead, the
RTE invokes Com_SendSignal once for a primitive data element or for transformed
data and expects the fan-out to multiple PDU destinations to occur lower down in the
AUTOSAR communication stack. However, it is necessary for the RTE to support
signal fan-out since this cannot be performed by any lower level layer of the AUTOSAR
communication stack.
The data mapping in the System Template[8] is based on the SystemSignal and
SystemSignalGroup. The COM module however uses the ISignal and ISignal-
Group counterparts (ComSignal, ComSignalGroup, ComGroupSignal) to define
the COM API. The RTE Generator needs to identify whether there are several ISig-
nal or ISignalGroup elements defined for the SystemSignal or SystemSignal-
Group and implement the fan-out accordingly. Then the corresponding elements in
the COM ecu configuration (ComSignal, ComSignalGroup, ComGroupSignal) are
required to establish the interaction between Rte and COM.
With the usage of Data Transformation a mixture of different serialization technologies
for signal fan-out in the RTE can be used. This is determined by the ISignal or
ISignalGroup association to DataTransformation.
[SWS_Rte_06023] d For inter-ECU transmission of a primitive data type, the RTE shall
perform for each ISignal to which the primitive data element is mapped
    the transformation if the ISignal references a TransformationTechnology
    the invocation of Com_SendSignal
c(SRS_Rte_00019, SRS_Rte_00028, SRS_Rte_00247)
For the invocation the ComHandleId from the ComSignal of COMs ecu configuration
shall be used (see [SWS_Rte_04505]).
If the data element is typed by a composite data type several scenarios shall to be
considered for each of the signal fan-out based on the ISignal or ISignalGroup
association to DataTransformation:
    no Data Transformation: RTE invokes Com_SendSignal (if parameter
     RteUseComShadowSignalApi is FALSE) or Com_UpdateShadowSignal (if
     parameter RteUseComShadowSignalApi is TRUE) for each primitive element
     (ISignal) in the composite data type and each COM signal to which that primi-
     tive element is mapped, and Com_SendSignalGroup for each ISignalGroup
     that does not require a Data Transformation to which the data element is
     mapped.
    Data Transformation without COM Based Transformer: RTE performs the trans-
     formation and then invokes Com_SendSignal for each ISignal that has the
     dataTransformation association to the DataTransformation defined.
    Data Transformation with COM Based Transformer: RTE performs the trans-
     formation and then invokes Com_SendSignalGroupArray for each ISignal-
     Group that has the comBasedSignalGroupTransformation association to
     the DataTransformation defined.
Note:
It is also possible to configure the system to use multiple of these scenarios at the
same time. Then the RTE executes all configured scenarios.
[SWS_Rte_04526] Inter-ECU transmission of composite data without Data Trans-
formation d For inter-ECU transmission of composite data type where
    a SenderReceiverToSignalGroupMapping to the VariableDataProto-
     type is defined
    and the respective ISignalGroup has no comBasedSignalGroupTrans-
     formation defined
the RTE shall invoke Com_SendSignal (if parameter RteUseComShadowSignalApi
is FALSE) or Com_UpdateShadowSignal (if parameter RteUseComShadowSig-
nalApi is TRUE) for each ISignal to which an element in the composite data type
is mapped and Com_SendSignalGroup for each ISignalGroup to which the com-
posite data element is mapped. c(SRS_Rte_00019, SRS_Rte_00028)
For the invocation the ComHandleId from the ComGroupSignal and ComSig-
nalGroup of COMs ecu configuration shall be used (see [SWS_Rte_05173] and
[SWS_Rte_05081]).
[SWS_Rte_08586] Inter-ECU transmission of composite data with COM Based
Data Transformation d For inter-ECU transmission of composite data type where
    a SenderReceiverToSignalGroupMapping to the VariableDataProto-
     type is defined
    and the respective ISignalGroup has a comBasedSignalGroupTransfor-
     mation reference defined
4.3.1.11.4 Fan-in
When receiving data from multiple senders in inter-ECU communication, either the
RTE on the receiver side has to collect data received in different COM signals or COM
signal groups and pass it to one receiver or the RTE on the sender side has to pro-
vide shared access to a COM signal or COM signal group to multiple senders. The
receiver RTE, which has to handle multiple COM signals or signal groups, is notified
about incoming data for each COM signal or COM signal group separately but has
to ensure data consistency when passing the data to the receiver. The sender RTE,
which has to handle multiple senders sharing COM signals or signal groups, has to
ensure consistent access to the COM API, since COM API calls for the same signal
are not reentrant.
Figure 4.39 shows a sequence diagram of how Sender Receiver communication for
data transmission and non-blocking reception may be implemented by RTE. The se-
quence diagram also shows the Rte_Read API behavior if an initValue is specified.
In case the COM Based Transformer [23] is used the sequence in fig-
ure 4.39 is the same, but Com_SendSignalGroupArray() is used instead of
Com_SendSignal() and Com_ReceiveSignalGroupArray() is used instead of
Com_ReceiveSignal().
      Sender                 Sender's RTE             Sender's               Sender's COM                  Receiver's           Receiver's RTE           Receiver
    A pplic ation                                    Transformer            Network Receiver's            Transformer                                   applic ation
                                                                                  COM
Com_S endSignal()
                                                        E_OK()
                                                                                                                                           (8) RTE receives the data
                                                                                                                                           item a from COM and
                    RTE_E_OK()
                                             (7) The received data item is                                                                 replace the previous
                                             copied to the COM buffer for data                                                             value in the RTE buffer
                                             item a and the notification                            Rte_COMCbk_<sn>()                      for data item a.
                                             callback provided by RTE is                                                                   Note! The callback must
                                             invoked.                                                                                      block the RTERead_p_a
                                                                                                    Com_ReceiveSignal()                    call.
E_OK()
RTE_E_OK()
Figure 4.39: Sender Receiver communication with data semantics and dataReceive-
PointByArgument as reception mechanism
Figure 4.40 shows a sequence diagram of how Sender Receiver communication for
event transmission and non-blocking reception may be implemented by RTE. The se-
quence diagram shows the Rte_Receive API behavior when the queue is empty.
In case the COM Based Transformer [23] is used the sequence in fig-
ure 4.40 is the same, but Com_SendSignalGroupArray() is used instead of
Com_SendSignal() and Com_ReceiveSignalGroupArray() is used instead of
Com_ReceiveSignal().
      Sender               Sender's RTE             Sender's RTE            Sender's COM               Receiver's RTE            Receiver's RTE              Receiver
    A pplic ation                                                          Netwok Receiver's                                                                applic ation
                                                                                COM
                         (3) The data value                                                    (2) The RTE - queue for event p_e
                         provided by the sender                                                is empty => RTE_E_NO_DATA is
                         is copied to the RTE                                                  returned to Receiver application.
                         allocated queue.                                                                                                RTE_E_NO_DATA()
            Rte_Send_p_e()
                                                     (4) the provided data is
                                                     converted. Only if data
                                                     conversion applies
                                                     (optional)
                                          X frm_<name>()
                                                                   (5) The queue entry is
                                                                   transformed to an array and
                                                                   transferred to the COM stack
Com_S endSignal()
E_OK()
RTE_E_OK()
E_OK()
Rte_Receive_p_e()
RTE_E_OK()
  Inter-ECU communication
  Explicit Sender-Receiver communication:
  Port name = p                                                                                                                               (10) The received
  Data element name = e                                                                                                                       event item a is
  VariableDataPrototype with a queued swImplPolicy (Event distribution)                                                                       stored in the
  The sender VariableDataPrototype is referenced by a VariableAccess in role dataSendPoint                                                    receiver's OUT
  The receiver VariableDataPrototype is referenced by a VariableAccess in role dataReceivePointByArgument                                     parameter
  No WaitPoint is referencing the DataReceivedEvent that references the VariableDataPrototype (non-blocking
  reception)
Figure 4.40: Sender Receiver communication with event semantics and dataReceive-
PointByArgument as reception mechanism
Figure 4.41 shows a sequence diagram of how Sender Receiver communication for
event transmission and activation of runnable entity on the receiver side may be imple-
mented by RTE.
In case the COM Based Transformer [23] is used the sequence in fig-
ure 4.41 is the same, but Com_SendSignalGroupArray() is used instead of
Com_SendSignal() and Com_ReceiveSignalGroupArray() is used instead of
Com_ReceiveSignal().
      Sender              Sender's RTE           Sender's RTE           Sender's COM         Receiver's RTE             Receiver's RTE       Receiver runnable
    A pplication                                                       Netwok Receiver's
                                                                            COM
Rte_Send_p_e()
X frm_<name>()
Com_S endSignal()
E_OK()
RTE_E_OK()
Rte_COMCbk_<sn>()
                                                                                                                                ReceiversRunnable()
                                                                                              (3) The AUTOSAR OS
      Inter-ECU communication                                                                 task that will execute
      Port name = p                                                                           the receiver's runnable
      Data element name = e                                                                   is started.
      VariableDataPrototype with a queued swImplPolicy (Event distribution)
      The sender VariableDataPrototype is referenced by a VariableAccess in role
      dataSendPoint
      The receiver VariableDataPrototype is referenced by a DataReceivedEvent              (4) RTE fetches an event
      which in turn references the receiver RunnableEntity.                                from the event e queue
                                                                                           and calls the receiver's              (5) The task is
                                                                                           runnable.                             completed
Figure 4.41: Sender Receiver communication with event semantics and activation of
runnable entity as reception mechanism
Figure 4.42 shows a sequence diagram of how Sender Receiver communication for
data transmission and non-blocking reception may be implemented by RTE when using
LdCom.
                 Sender                      Sender's RTE                       Sender                    Sender's LdCom                     Reciever                           Receiver's RTE               Receiver
               A pplic ation                                                Transformer and                   -Netwok-                    Transformer and                                                   A pplic ation
                                                                             Detransformer                Receiver's LdCom                 Detransformer
Rte_Write_p_a()
                           opt Transformer
                                                               X frm()
                                                                                              (2) RTE transforms all data
                                                                E_OK()                        elements into a byte array
                                                                          LdCom_Transmit()
                                                                                                                             (3) RTE calls LdCom_Transmit for the transformed
                                                                                  E_OK()                                     byte array. In case LdComApiType ==
                                                                                                                             LDCOM_TP the RTE buffer is now locked.
                                RTE_E_OK()
RTE_E_COM_BUSY()
                                                                                                                                                                                                   c opy_data()
                                                                                                                                              BUFREQ_OK()
Rte_LdComTpTxConfirmation()
X fm_Inv()
Rte_Read_p_a()
E_OK()
Figure 4.42: Sender Receiver communication with data semantics over LdCom
The Software Component template allows specifying whether an unqueued data, de-
fined in an AUTOSAR Interface, has been updated since system start (or partition
restart) or not. This additional optional status establishes the possibility to check
whether a data element has been changed since system start (or partition restart).
[SWS_Rte_07381] d On receiver side the handleNeverReceived attribute of the
NonqueuedReceiverComSpec shall specify the handling of the never received sta-
tus. c(SRS_Rte_00184)
[SWS_Rte_07382] d The initial status of the data elements with the attribute handleN-
everReceived set to TRUE shall be RTE_E_NEVER_RECEIVED. c(SRS_Rte_00184)
[SWS_Rte_07383] d The initial status of the data elements with the attribute han-
dleNeverReceived set to TRUE shall be cleared when the first reception occurs. c
(SRS_Rte_00184)
[SWS_Rte_07645] d The status of data elements shall be reset on the receiver
side to RTE_E_NEVER_RECEIVED when the receivers partition is restarted. c
(SRS_Rte_00184, SRS_Rte_00224)
[SWS_Rte_04529] d The configuration of the attribute handleNeverReceived to
TRUE shall have no effect for data elements received from an NvBlockSwCompo-
nentType, since these data elements are automatically received during initialization
of the RTE. c(SRS_Rte_00184)
The Software Component template allows specifying whether an unqueued data, de-
fined in an AUTOSAR Interface, has been updated since last read or not. This addi-
tional optional status establishes the possibility to check, whether a data element has
been updated since last read.
On receiver side the enableUpdate attribute of the NonqueuedReceiverComSpec
has to activate the handling of the update flag.
[SWS_Rte_07385] d The RTE shall provide one update flag per dataElement
in a RPortPrototype where the enableUpdate attribute of the Nonqueue-
dReceiverComSpec is set to true and where at least one RunnableEntity defines
a VariableAccess in the dataReceivePointByArgument or dataReceive-
PointByValue role. c(SRS_Rte_00179)
[SWS_Rte_07386] d The update flag of the data elements configured with the en-
ableUpdate attribute shall be set by receiving new data from COM or from a local
software-component (including NvBlockSwComponentType). c(SRS_Rte_00179)
    The COM_BUSY error should not be possible during the execution of COM call-
     backs (Rx indication and Tx confirmation) that can be used by the RTE to handle
     the queue.
    Data are queued internally by RTE and accessible at any time by the application.
Note: First point is especially true if the ComIPduSignalProcessing is configured
as IMMEDIATE. But if the ComIPduSignalProcessing is configured as DEFFERED
and 2 events are closely received, it is possible that at the time the RTE tries to access
the corresponding COM signal the second event reception has already started. In this
case the RTE will received COM_BUSY and the event will be lost but it is more a
problem of configuration than a limitation from COM.
As a consequence it has been decided to limit the data mapped to N-PDU to the event
semantic (queued behavior). See [SWS_Rte_07811].
Note: As the data mapping is not mandatory for the RTE contract phase, it is possible
that a configuration is accepted at contract phase but rejected at generation phase
when the data mapping is known.
Dynamic data are always mapped to N-PDU in case of inter-ECU communication. So
in order to avoid such situation (late rejection at generation phase) and in order to
respect the VFB concept (intra and inter-ECU should be equal) it has been decided
to extend this limitation to every dynamic data whatever the communication is intra or
inter-ECU. See [SWS_Rte_07812].
4.3.1.16.1 COM
The rules for the decision whether to use Efficient COM for large data (LdCom) are
described in System Template [8], chapter 6.2.
[SWS_Rte_01376] d The RTE shall use LdCom for sending/receiving arrays of bytes if
the corresponding ComSignal is mapped to LdComIPdu. c(SRS_Rte_00246)
Transmission
[SWS_Rte_01377] d The RTE shall use the LdCom_Transmit API if LdComApiType
is set to LDCOM_IF in LdComIPdu. c(SRS_Rte_00231)
In case If-API is used upon LdCom_Transmit, the transmit request is passed imme-
diately to the lower layer. After return of the API the data does not need to be locked.
[SWS_Rte_01378] d The RTE shall use the LdCom_Transmit API if LdComApiType
is set to LDCOM_TP in LdComIPdu. c(SRS_Rte_00231)
In case TP-API is used, after LdCom_Transmit one or more invocations of
Rte_LdComCbkCopyTxData_<sn> by LdCom will occur asynchronously. The Trans-
mission is finalized by Rte_LdComCbkTpTxConfirmation_<sn>.
During this time the data has to be available for being passed to LdCom.
[SWS_Rte_01379] d The RTE shall lock the signal buffer after it initiated a Tp Trans-
mission (LdCom_Transmit returned RTE_E_OK). c(SRS_Rte_00246)
During the signal buffer is locked no further transmit requests are permitted on
that item. For data semantics this means that Rte_Write/Rte_Call will return
RTE_E_COM_BUSY.
[SWS_Rte_01380] d The RTE shall unlock the signal buffer after
Rte_LdComCbkTpTxConfirmation_<sn> has been invoked (independent of
the result). c(SRS_Rte_00246)
[SWS_Rte_01381] d The RTE shall copy the indicated number of bytes to the
provided destination in each invocation of Rte_LdComCbkCopyTxData_<sn>. c
(SRS_Rte_00246)
[SWS_Rte_01382] d For signals for which the Rte_LdComCbkTriggerTransmit_<sn>
API is configured the data of the corresponding signal has to be available during the
whole runtime of the RTE. c(SRS_Rte_00246)
Rationale: A call to TriggerTransmit may happen at any time, since it originates from
lower BSW layers.
Hint: Main use case for [SWS_Rte_01382] is the transmission of the current value for
newly (late) subscribed receivers in ServiceDiscovery.
[SWS_Rte_01383] d If Rte_LdComCbkTriggerTransmit_<sn> is invoked, data
shall be copied to the provided destination. c(SRS_Rte_00246)
Reception
[SWS_Rte_01384] d If Rte_LdComCbkRxIndication_<sn> is invoked RTE shall
provide the following steps:
    copy the passed signal data to the buffer
    fire a DataReceivedEvent (if configured)
    return
c(SRS_Rte_00246)
[SWS_Rte_01385] d If Rte_LdComCbkStartOfReception_<sn> is invoked RTE
shall lock the corresponding reception buffer. c(SRS_Rte_00246)
[SWS_Rte_01386] d If Rte_LdComCbkCopyRxData_<sn> is invoked RTE shall copy
the passed signal data (or the indicated portion) to the previously locked reception
buffer. c(SRS_Rte_00246)
[SWS_Rte_01387] d If Rte_LdComCbkTpRxIndication_<sn> is invoked RTE shall
unlock the previously locked reception buffer. c(SRS_Rte_00246)
[SWS_Rte_01388] d When Rte_LdComCbkTpRxIndication_<sn> is invoked and
the passed result code is RTE_E_OK, it shall fire the DataReceivedEvent. Otherwise
the signal value shall be set to the invalidValue for data elements with a swImplPol-
icy different from queued. c(SRS_Rte_00246)
4.3.2 Client-Server
4.3.2.1 Introduction
Client-server communication involves two entities, the client which is the requirer (or
user) of a service and the server that provides the service.
The client initiates the communication, requesting that the server performs a ser-
vice, transferring a parameter set if necessary. The server, in the form of the RTE,
waits for incoming communication requests from a client, performs the requested
service and dispatches a response to the clients request. So, the direction of initia-
tion is used to categorize whether a AUTOSAR software-component is a client or a
server.
A single component can be both a client and a server depending on the software
realization.
The invocation of a server is performed by the RTE itself when a request is made by
a client. The invocation occurs synchronously with respect to the RTE (typically via
a function call) however the clients invocation can be either synchronous (wait for
server to complete) or asynchronous with respect to the server.
Note: servers which have an asynchronous operation (i.e. they accept a request
and another provide a feedback by invoking a server of the caller) should be avoided
as the RTE does not know the link between these 2 client-server communications. In
particular, the server should have no OUT (or INOUT) parameters because the RTE
cannot perform the copy of the result in the callers environment when the request was
processed.
[SWS_Rte_06019] d The only mechanism through which a server can be invoked is
through a client-server invocation request from a client. c(SRS_Rte_00029)
The above requirement means that direct invocation of the function implementing the
server outside the scope of the RTE is not permitted.
A server has a dedicated provide port and a client has a dedicated require port.
To be able to connect a client and a server, both ports must be categorized by the
same interface.
The client can be blocked (synchronous communication) respectively non-blocked
(asynchronous communication) after the service request is initiated until the response
of the server is received.
A server implemented by a RunnableEntity with attribute canBeInvokedCon-
currently set to FALSE is not allowed to be invoked concurrently and since a
server can have one or more clients the server may have to handle concur-
rent service calls (n:1 communication) the RTE must ensure that concurrent calls do
not interfere.
[SWS_Rte_04515] d The RTE shall ensure that call serialization8 of the operation is en-
forced when the server runnable attribute canBeInvokedConcurrently is FALSE.
c(SRS_Rte_00019, SRS_Rte_00033)
Note that the same server may be called using both synchronous and asynchronous
communication.
Note also that even when canBeInvokedConcurrently is FALSE, an Atomic-
SwComponentType might be instantiated multiple times. In this case, the implemen-
tation of the RunnableEntity can still be invoked concurrently from several tasks.
However, there will be no concurrent invocations of the implementation with the same
instance handle.
[SWS_Rte_04516] d The RTEs implementation of the client-server communication
shall ensure that a service result is dispatched to the correct client if more than one
client uses a service. c(SRS_Rte_00019, SRS_Rte_00080)
The result of the client/server operation can be collected using wake up of wait point,
explicit data read access or activation of runnable entity.
[SWS_Rte_07409] d If all the following conditions are satisfied:
     the server runnables property canBeInvokedConcurrently is set to TRUE
   8
     Call Serialization ensures at most one thread of control is executing an instance of a runnable
entity at any one time. An AUTOSAR software-component can have multiple instances (and therefore
a runnable entity can also have multiple instances). Each instance represents a different server and
can be executed in parallel by different threads of control thus serialization only applies to an individual
instance of a runnable entity  multiple runnable entities within the same component instance may also
be executed in parallel.
    the client and server execute in the same partition, i.e. intra-partition
     Client-Server communication
    the ServerCallPoint is Synchronous
    the OperationInvokedEvent is not mapped to an OsTask
the RTE Generator shall implement the Client-Server communication as a direct func-
tion call. c()
Note: In case the conditions in [SWS_Rte_04522] are fulfilled the RTE Generator may
implement a client-server call with a direct function call, even when the server runn-
ables property canBeInvokedConcurrently is set to FALSE.
Since the communication occurs conceptually via the RTE (it is initiated via an RTE API
call) the optimization does not violate the requirement that servers are only invoked via
client-server requests (see Sect. 5.6.13, [SWS_Rte_06019]).
[SWS_Rte_07662] d The RTE Generator shall reject configurations where an
ClientServerOperation has an ArgumentDataPrototype whose Implemen-
tationDataType is of category DATA_REFERENCE and whose direction is
INOUT. c(SRS_Rte_00018, SRS_Rte_00019)
[SWS_Rte_08731] d If the return value of the serialization call is not equal to E_OK the
RTE shall not call Com_SendSignal c(SRS_Rte_00091)
4.3.2.2 Multiplicity
Example 4.8
Consider a client-server interface that has two operations, op1 and op2 and that an
AUTOSAR software-component definition requires a port typed by the interface. As
a result, the RTE generator will create two API calls; one to invoke op1 and another
to invoke op2. The calls can invoke the server operations either synchronously or
asynchronously depending on the configuration.
The RTE is not required to support multiple server operations invoked by a single client
component request (1:n communication where n > 1) (see [constr_1037] in [2]).
Each client can invoke the server simultaneously and therefore the RTE is required to
support multiple requests of servers. If the server requires call serialization, the RTE
has to ensure it.
[SWS_Rte_04520] d The RTE shall support simultaneous invocation requests of a
server operation. c(SRS_Rte_00019, SRS_Rte_00080)
[SWS_Rte_04522] d The RTE shall ensure that the RunnableEntity implementing
a server operation has completed the processing of a request before it begins process-
ing the next request, if serialization is required by the server operation, i.e canBeIn-
vokedConcurrently attribute of the server is set to FALSE and client RunnableEn-
titys to OsTask mapping (RteEventToTaskMapping) may lead to concurrent in-
vocations of the server. c(SRS_Rte_00019, SRS_Rte_00033)
When this requirement is met the operation is said to be call serialized. A call se-
rialized server only accepts and processes requests atomically and thus avoids the
potential for conflicting concurrent access.
Client requests that cannot be serviced immediately due to a server operation being
busy are required to be queued pending processing. The presence and depth of the
queue is configurable.
If the RunnableEntity implementing the server operation is reentrant , i.e. can-
BeInvokedConcurrently attribute set to TRUE, no serialization is necessary. This
allows to implement invocations of reentrant server operations as direct function calls
without involving the RTE.
But even when the canBeInvokedConcurrently attribute is set to FALSE the
RTE Generator still can utilize a direct function call, if the mapping of the client
RunnableEntitys to OsTasks will not imply a concurrent execution of the server.
[SWS_Rte_08001] d If two operations are mapped to the same RunnableEntity,
and [SWS_Rte_04522] requires a call serialization, then the operation invoked events
shall be mapped to same task and they shall have the same position in task. Otherwise
the RTE Generator shall reject configuration. c(SRS_Rte_00019, SRS_Rte_00033)
[SWS_Rte_08002] d If two operations are mapped to the same RunnableEntity,
and [SWS_Rte_04522] requires a call serialization, then a single queue is imple-
mented for invocations coming from any of the operations. c(SRS_Rte_00019,
SRS_Rte_00033)
The ServerCallPoint allows to specify a timeout so that the client can be notified
that the server is not responding and can react accordingly. If the client invokes the
server synchronously, the RTE API call to invoke the server reports the timeout. If
the client invokes the server asynchronously, the timeout notification is passed to the
client by the RTE as a return value of the API call that collects the result of the server
operation.
[SWS_Rte_03763] d The RTE shall ensure that timeout monitoring is performed
for client-server communication, regardless of the receive mode for the result. c
(SRS_Rte_00069, SRS_Rte_00029)
If the server is invoked asynchronously and a WaitPoint is specified to collect the
result, two timeout values have to be specified, one for the ServerCallPoint and
one for the WaitPoint.
[SWS_Rte_03764] d The RTE generator shall reject the configuration if different
timeout values are specified for the AsynchronousServerCallPoint and for the
WaitPoint associated with the AsynchronousServerCallReturnsEvent for this
AsynchronousServerCallPoint. c(SRS_Rte_00018)
In inter-ECU communication, the client RTE has no knowledge about the actual status
of the server. The response of the server could have been lost because of a commu-
nication error or because the server itself did not respond. Since the client-side RTE
cannot distinguish the two cases, the client must be able to invoke the server again
after a timeout expired. As partitions in one ECU are decoupled in a similar way like
separate ECUs, and can be restarted separately, client server communication should
behave similar for inter-ECU and intra-partition communication.
[SWS_Rte_03772] d If a timeout was detected in asynchronous inter-ECU or
inter-partition client-server communication, the RTE shall ensure that the server
can be invoked again by the same client after the timeout notification was passed to
the client. c(SRS_Rte_00069, SRS_Rte_00079)
Note that this might lead to client and server running out of sync, i.e. the response of
the server belongs to the previous, timed-out invocation of the client. The application
has to handle the synchronization of client and server after a timeout occurred.
[SWS_Rte_03767] d If the timeout value of the ServerCallPoint is 0, no timeout
monitoring shall be performed. c(SRS_Rte_00069, SRS_Rte_00029)
[SWS_Rte_03768] d If the canBeInvokedConcurrently attribute of the server runn-
able is set to TRUE, no timeout monitoring shall be performed if the RTE API call
to invoke the server is implemented as a direct function call. c(SRS_Rte_00069,
SRS_Rte_00029)
[SWS_Rte_02709] d In case of inter partition communication, if the partition of the
server is stopped or restarting at the invocation time of the server call or during the
operation of the server call, the RTE shall immediately provide a timeout indication to
the client. c()
Note: In case of inter-ECU or interpartition client-server communication it is recom-
mended to always specify a timeout>0 when synchronous server calls are used. Oth-
erwise in case of a full server queue the client would wait for the server response
infinitely.
The required port-defined arguments (the fact that they are required, their data type
and their values) are specified within the input to the RTE generator.
[SWS_Rte_01360] d When invoking the runnable entity specified for an OperationIn-
vokedEvent, the RTE shall include the port-defined argument values between the in-
stance handle (if it is included) and the operation-specific parameters, in the order they
are given in the Software Component Template Specification [2]. c(SRS_Rte_00152)
Requirement [SWS_Rte_01360] means that a client will make a request for an opera-
tion on a require (Client-Server) port including only its instance handle (if required) and
the explicit operation parameters, yet the server will be passed the implicit parameters
as it requires.
Note that the values of implicit parameters are constant for a particular server runnable
entity; it is therefore expected that using port-defined argument values imposes no
RAM overhead (beyond any extra stack required to store the additional parameters).
4.3.2.5 Buffering
A buffer overflow of the server is not reported to the client. The client will receive a time
out.
[SWS_Rte_07008] d If a server call is implemented by direct function call the RTE
shall not create any copy for parameters passed by reference. c(SRS_Rte_00033,
SRS_Rte_00110)
Therefore, it is the responsibility of the application to provide consistency mechanisms
for referenced parameters if necessary.
RTE is responsible to map a response to the corresponding request. With this map-
ping, RTE can activate or resume the corresponding runnable and provide the re-
sponse to the correct client. The following situations can be distinguished:
    Mapping of a response to the correct request within one ECU. In general, this is
     solved already by the call stack. The details are implementation specific and will
     not be discussed in this document.
    Mapping of a response coming from a different partition or a different ECU.
The problem of request to response mapping in inter-ECU and inter-Partition commu-
nication can be split into:
    Mapping of a response to the correct client. This is discussed in 4.3.2.6.1.
    Mapping of a response to the correct request within of one client. This is dis-
     cussed in 4.3.2.6.2.
The general approach for the inter-ECU and inter-Partition request response mapping
is to use transaction handles.
[SWS_Rte_02649] d In case of inter-ECU client-server communication, the transaction
handle shall contain two parts of unsigned integer type:
    Client Identifier
    Client Sequence Counter
c(SRS_Rte_00027, SRS_Rte_00082)
[SWS_Rte_04544] d In case of inter-ECU client-server communication, where Meta-
Data is configured for the PDU associated to the SystemSignal, the transaction han-
dle shall additionally contain the item MetaData of unsigned integer type. The size shall
be equal to the size of the configured MetaData. c(SRS_Rte_00027, SRS_Rte_00082)
[SWS_Rte_08711] d The Client Identifier of the transaction handle used for a inter-
ECU client server communication shall be of type uint16. c(SRS_Rte_00082,
SRS_Rte_00091)
[SWS_Rte_07413] d The Client Identifier of the transaction handle used for a inter-ECU
client server communication may be defined at the ClientIdDefinition belonging
to the Ecu Extract and referring the operation instance. If defined the RTE generator
shall take the clientId from the ClientIdDefinition. If not defined the RTE
generator shall set the clientId to 0. c(SRS_Rte_00082, SRS_Rte_00091)
[SWS_Rte_08712] d The Client Sequence Counter part of the transaction handle
used for a inter-ECU client server communication shall be of type uint16. c
(SRS_Rte_00082, SRS_Rte_00091)
[SWS_Rte_07346] d In case of inter-Partition client-server communication, the RTE
shall not communicate any response to the client if the client is part of a partition that
was restarted since the request was sent. c(SRS_Rte_00027, SRS_Rte_00082)
[SWS_Rte_07346] could be implemented with a transaction handle that contains a
sequence counter.
[SWS_Rte_02651] d In case of inter-ECU client-server communication, the transaction
handle shall be used for the identification of client server transactions communicated
via COM or LdCom. c(SRS_Rte_00027, SRS_Rte_00082)
[SWS_Rte_02653] d The RTE on the server side shall return the transaction handle
of the request without modification together with the response. The MetaData item
(if contained) in the transaction handle shall be passed to LdCom when invoking the
transmission of the response c(SRS_Rte_00027, SRS_Rte_00082)
Note: MetaData handling is currently only supported for LdCom. When using Com still
one dedicated SystemSignal has to be used for each calling ECU.
Since there is always at most one open request per client (see [SWS_Rte_02658]), the
transaction handle can be kept within the RTE and does not have to be exposed to the
AUTOSAR SW-C.
In case of a server on one ECU with clients on other ECUs, the inter-ECU client-server
communication has to use different unique SystemSignals for each client-ECU to
allow the identification of the client-ECU associated with each client call. However
Client ECUs for which MetaData is configured for distinction of calling ECUs can be
configured sharing one unique SystemSignal if LdCom is used. The interface to the
COM module currently doesnt support it.
[SWS_Rte_02579] d The RTE Generator shall reject configurations where there is
inter-ECU client-server communication from several client-ECUs using the same Sys-
temSignals and no MetaData is configured for distinction. c(SRS_Rte_00029,
SRS_Rte_00082, SRS_Rte_00018)
With this mechanism, the server-side RTE must handle the fan-in. This is done in the
same way as for sender-receiver communication.
4.3.2.6.2 SequenceCounter
such mapping (since a client can connect to exactly one server). Fan-out is not sup-
ported for clients and therefore multiple mappings are not permitted.
[SWS_Rte_08700] d The RTE generator shall reject an input configuration where
a ClientServerOperation owned by an RPortPrototype is referenced
by more than one ClientServerToSignalMapping with identical values of
the attribute ClientServerOperation . c(SRS_Rte_00018, SRS_Rte_00027,
SRS_Rte_00082, SRS_Rte_00091)
[SWS_Rte_08703] d For an inter-ECU client-server communication, the RTE of the
client ECU shall communicate the request to a remote server using the callSignal
of the ClientServerToSignalMapping which references the operation instance. c
(SRS_Rte_00027, SRS_Rte_00082, SRS_Rte_00091)
[SWS_Rte_08705] d For an inter-ECU client-server communication, the RTE of the
client ECU shall receive the results of a remote server using the returnSignal of
the ClientServerToSignalMapping which references the operation instance. c
(SRS_Rte_00027, SRS_Rte_00082, SRS_Rte_00091, SRS_Rte_00123)
[SWS_Rte_08707] d For an inter-ECU client-server communication, the RTE of the
server ECU shall receive a request of a remote client using the callSignal of
the ClientServerToSignalMapping which references the operation instance. c
(SRS_Rte_00027, SRS_Rte_00082, SRS_Rte_00091)
[SWS_Rte_08709] d For inter-ECU client-server communication, the RTE of the server
ECU shall communicate the results to a remote client using the returnSignal of
the ClientServerToSignalMapping which references the operation instance. c
(SRS_Rte_00027, SRS_Rte_00082, SRS_Rte_00091, SRS_Rte_00123)
4.3.2.8 Operation
The client server protocol defines how a client call and the server response are mapped
onto the communication infrastructure of AUTOSAR in case of inter-ECU communica-
tion. This allows RTE implementations from different vendors to interpret the client
server communication in the same way.
The AUTOSAR System Template [8] does specify a protocol for the client server com-
munication in AUTOSAR.
4.3.2.8.2 Atomicity
The requirements for atomicity from Section 4.3.1.11.2 also apply for the composite
data types described in Section 4.3.2.8.1.
Figure 4.43 shows a sequence diagram of how asynchronous client server communi-
cation may be implemented by RTE.
     Client Application               Client's RTE                     Client's                    Client's COM                        Server's               Server's RTE                       Server
                                                                     Transformer                  Netwok Server's                    Transformer
                                                                                                       COM
                    Rte_Call_p_o()
                                                     Xfrm_<name1>()
                                                                                 (1) RTE transforms all IN
                                                        E_OK()                   parameters of the operation
                                                                        E_OK()
                                                                                                                 (2) RTE calls Com_SendSignal for the
                                                                                                                 byte array to transfer all IN parameters
                                                                                                                 using it's COM
                                       [dynamicLength == false]
                                                                 Com_SendSignal()
E_OK()
                      RTE_E_OK()
                                                                                                                             Rte_COMCbk_<sg>()
E_OK()
E_OK()
                                                                                                       [dynamicLength == false]
                                                                                                                          Com_SendSignal()
E_OK()
Rte_COMCbk_<sg>()
E_OK()
                                        [dynamicLength == false]
                                                           Com_ReceiveSignal()
E_OK()
Xfrm_Inv_<name2>()
                                                        E_OK()
              ClientResponseRunnable()
                                                                                  (9) RTE deserializes all OUT parameters and activates the
                                                                                  Client's response runnable.
Figure 4.44 shows a sequence diagram of how synchronous client server communica-
tion may be implemented by RTE.
                  Client Application                Client's RT E                    Client's                  Client's COM                       Server's                     Server's RTE                      Server
                                                                                   Transformer                Netwok Server's                   Transformer
                                                                                                                   COM
                                 Rte_Call_p_o()
                                                                    Xfrm_<name1>()
                                                                                              (1) RTE transforms all IN
                                                                                              parameters of the operation into
                                                                       E_OK()
                                                                                              a byte array
E_OK()
                                                         [dynamicLength == false]
                                                                           Com_SendSignal()
E_OK()
                                                            WaitEvent(EventXY)
     Client Application is
     blocked.                          Client task is
                                       set waiting                                                                                         Rte_COMCbk_<sg>()
                                                                                                                                                    E_OK()
                                                                                                                                                                                                 (4) The Server's COM
                                                                                                                                                                                                 receives the transformed
                                                                                                                    [dynamicLength == false]                                                     byte array
                                                                                                                                         Com_ReceiveSignal()
E_OK()
Xfrm_<name2>()
E_OK()
                                                                                                                   [dynamicLength == false]
                                                                                                                                            Com_SendSignal()
E_OK()
                                                                                Rte_COMCbk_<sg>()
                                        Client task is
                                        released            SendEvent(EventXY)
E_OK()
                                                         [dynamicLength == false]
                                                                            Com_ReceiveSignal()
E_OK()
Partitions are used to decompose an ECU into functional units. Partitions can con-
tain both SW-Cs and BSW modules. The partitioning is done to protect the software
contained in the partitions against each other or to increase the performance by run-
ning the partitions on different cores of a multi core controller.
Since the partitions may be separated by core boundaries or memory boundaries and
since the partitions can be stopped and restarted independently, the observable be-
havior to the SW-Cs for the communication between different partitions is rather similar
to the inter ECU communication than to the intra partition communication. The RTE
needs to use special mechanisms to communicate from one partition to another.
Like for the inter ECU communication, inter partition communication uses the connec-
tionless communication paradigm. This means, that a send operation is successful for
the sender, even if the receiving partition is stopped. A receiver will only, by means of
a timeout, be notified if the partition of the sender is stopped.
Unlike most basic software, the RTE does not have a main processing function. The
execution logic of the RTE is contained in the generated task bodies, the wrapper code
around the runnables whose execution RTE manages.
As the tasks that contain the SW-Cs runnables are uniquely assigned to partitions (see
page 11EER of [15]), the execution logic of the RTE is split among the partitions. It
can not be expected that the RTE generated wrapper code running in one partition can
directly access the memory objects assigned to the RTE part of another partition.
In this sense, there is one RTE per partition, that contains runnable entities.
The general idea to allow the data communication between partitions in a most efficient
way and still be independent of the micro controller implementation is to take the buffers
and queues from the intra partition communication case and replace them with so
called IOC communication objects in the inter partition communication case.
In the ideal case, the access macros to the IOC communication object resolve to a
direct access to shared memory.
The IOC (Inter OS-Application Communication) is a feature of the AUTOSAR OS, which
provides a data oriented communication mechanism between partitions. The IOC pro-
vides communication buffers, queues, and protected access functions/macros to these
buffers that can be used from any pre-configured partitions concurrently.
The IOC offers communication of data to another core or between memory protected
partitions with guarantee of data consistency.
All data communications including the passing of parameters and return values in client
server communication, can be implemented by using the IOC. The basic principle for
using the IOC is to replace the RTE internal communication buffers by IOC buffers.
The IOC supports 1:1 and N:1 communication. For 1:N communication, N IOC com-
munication objects have to be used. The IOC is configured and provides generated
APIs for each IOC communication object. In case of N:1 communication, each sender
has a separate API.
The IOC API is not reentrant.
[SWS_Rte_02737] d RTE shall prevent concurrent access to the same IOC API from
different ExecutableEntity execution-instances. c()
The IOC will use the appropriate mechanism to communicate between the partitions,
whether it requires communicating with another core, communicating with a partition
with a different level of trust, or communicating with another memory partition.
The IOC channels are configured in the OS Configuration. Their configurations has to
be provided as inputs for the RTE generator when the external configuration switch
strictConfigurationCheck [SWS_Rte_05148] is set to true, and can be pro-
vided by the RTE Generator or RTE Configuration Editor when strictConfigura-
tionCheck is set to false (see [SWS_Rte_05150]).
The IOC APIs use:
  1. types declared by user on input to RTE (sender-receiver communication across
     OsApplication boudaries).
  2. types created by RTE to collect client-server operation arguments into single data
     structure.
For the second item, RTE uses internal types that have to be described as Imple-
mentationDataTypes (see [SWS_Rte_08400]).
The signaling between partitions is not covered by the IOC. The callbacks of IOC are
in interrupt context and are mainly intended for direct use by BSW. For the signaling
between partitions, RTE can use the activation of tasks or setting of events, see section
4.3.4.4.
[SWS_Rte_02736] d The RTE shall not execute ExecutableEntitys in the context
of IOC callbacks. c()
This is necessary to ensure that ExecutableEntitys will not be executed in interrupt
context or when a partition is terminated or restarted.
In case of a multi core configuration, if a software component on the slave core wants
to send data to a software component on another ECU, the RTE has to send data
from the slave core through the IOC to the master core which in turn calls the send
API of COM. The same behavior is required for receive case where the master core is
responsible for forwarding received COM data to slave core through IOC.
[SWS_Rte_08306] d It is the RTEs responsibility to interact with COM whenever it is
needed. c()
This requires some special handling by the RTE since it implies, at least in the send
case, the need of a scheduable entity to do the actual call of COM send API.
[SWS_Rte_08307] d The RTE shall generate two (BswSchedulableEntity s):
    Rte_ComSendSignalProxyPeriodic.
    Rte_ComSendSignalProxyImmediate.
Rte_ComSendSignalProxyPeriodic shall handle the sending of periodic signals
and Rte_ComSendSignalProxyImmediate shall handle the sending of immediate
signals. c()
[SWS_Rte_08308] d It shall be a possible to configure whether the return value of RTE
APIs is based on RTE-IOC interaction or RTE-COM interaction using the configuration
parameter RteIocInteractionReturnValue. A warning should preferably be is-
sued in case RTE-COM interaction return value is chosen since that will cause major
performance decrease. c()
Figure 4.45 shows a sequence diagram of how receive data through COM from slave
core may be implemented by RTE.
            Com_cbk(x)
                           IocWrite_<id>(x)
                                                                      Rte_Read()
                                                 IocRead_<id>(&x)
Figure 4.46 shows a sequence diagram of how send from COM to slave core may be
implemented by RTE.
                                                                                   RTE_Write(x)
                                                   IocWrite_<id>(returnInfo)
                           push(buffer_<id>,returnInfo)
                                                            IocWrite_<id>(x)
                                   push(buffer_<id>,x)
                                          Sw_Interrupt
                                                                WaitEvent(returnInfo.event)
IocRead_<id>(&x)
                              (*IocRead[returnInfo])(x)
        ComSendSignal(x)
          r
(*returnInfo.IocWriteReturn)(r)
                              SetEvent(returnInfo.event>)
                                                            IocRead_<id>(&r)
                                                                               r
Figure 4.47 shows a sequence diagram of how send from COM to slave core using
return value based on RTE-IOC interaction may be implemented by RTE.
                                                                                    RTE_Write(x)
                                                             IocWrite_<id>(signal_id)
                            push(buffer_<id>, signal_id)
                                      push(buffer_<id>,x)    IocWrite_<id>(x)
                                                                                r
Sw_Interrupt
IocRead_<id>(&signal_id)
(*IocRead[signal_id])(x)
ComSendSignal(x)
Figure 4.47: Send data through COM from slave core using return value based on RTE-
IOC interaction
4.3.4.4 Signaling and control flow support for inter partition communication
The OS ensures that the partition of the caller is not terminated or restarted when a
trusted function is executed. If needed, the termination or restart of the callers partition
is delayed after the trusted function returns.
RTE has to ensure, that the OS does not kill an RTE-generated task due to stopping
or restarting a partition while this task is executing a function call to BSW or to the
software component of another partition when this call is not a pure function.
For this purpose, RTE can use either the OS mechanism of trusted function call, or it
can allocate the server to a different task than the client.
[SWS_Rte_02761] d In a partitioned system that supports stop or restart of partitions,
the RTE shall not use a direct function call (without use of OS call trusted function)
from a task of an untrusted partition to BSW or to the SW-C of another partition unless
this is a pure function. c(SRS_Rte_00196)
Please note that [SWS_Rte_02761] might require the use of OS call trusted function
for a partitioned system even without memory protection.
In a memory protected ECU, a SW-C from an untrusted partition might misuse the
transition to the trusted context to modify memory in another partition. This can occur
when a pointer to a different memory partition is passed from the untrusted partition to
the trusted context. The RTE shall avoid this misuse by at least checking the validity
of the address of the pointer, and, where possible, also checking the integrity of the
associated memory object.
[SWS_Rte_02752] d When a SW-C in an untrusted partition receives (OUT parameter)
or provides (IN parameter with composite data type) an ArgumentDataPrototype
or VariableDataPrototype, it hands over a pointer to a memory object to an RTE
API. The RTE shall only forward this pointer to a trusted SW-C after it has checked that
the whole memory object is owned by the callers partition. c(SRS_Rte_00210)
[SWS_Rte_02753] d When a SW-C in an untrusted partition passes an Argument-
DataPrototype or VariableDataPrototype, as a reference type to a SW-C
in a trusted partition (DATA_REFERENCE as an IN parameter), the RTE shall only
check that the callers partition owns the start address of the referenced memory. c
(SRS_Rte_00210)
Note to [SWS_Rte_02753]: The RTE only checks whether the start address refer-
enced directly by the DataPrototypes belongs to the calling partition. Because the
RTE is not aware of the semantic of the pointed reference, it cannot check if the ref-
erenced object is completely contained in the calling partition (e.g. the RTE does not
know the size and does not know if the referenced object also contains references
to other objects). The BSW is responsible to make sure that the referenced memory
object does not cross memory section boundaries.
AUTOSAR supports the connection of an R-port to a P-port with an interface that is not
compatible in the sense of the AUTOSAR compatibility rules. In addition, for sender-
receiver communication it is possible to specify how data elements are represented
given that the communication requires the usage of a dedicated communication bus.
In these cases the generated RTE has to support the conversion and re-scaling of
data.
Per default the shortNames of PortInterface elements are used to identify the
matching element pairs of connected ports. In case of non fitting names  might
be caused due to distributed development, off-the-shelf development, or re-use of soft-
ware components  it is required to explicitly specify which PortInterface elements
shall correlate. This is modelled with PortInterfaceMappings. A connection of two
ports can be associated with a set of PortInterfaceMappings. If two ports are
connected and a PortInterfaceMapping for the pair of interfaces of the two ports
is associated with the connection, the interface elements are mapped and converted
as specified in the PortInterfaceMapping. If no PortInterfaceMapping for the
respective pair of interfaces is associated with the connection, the ordinary interface
compatibility rules are applied.
The general approach is to perform the data conversion in the RTE of the ECU imple-
menting the R-port. The reason for this design decision is that in case of 1:n sender-
receiver communication it is inefficient to perform all the data conversions for the mul-
tiple receivers on the sender side and then send multiple sets of the same data just in
different representations over the communication bus.
[SWS_Rte_03815] d The RTE shall support the mapping of sender-receiver interfaces,
parameter interfaces and non-volatile data interface elements. c(SRS_Rte_00182)
[SWS_Rte_03816] d If a P-port specified by a SenderReceiverInterface or Nv-
DataInterface is connected to an R-port with an incompatible interface and a
VariableAndParameterInterfaceMapping for both interfaces is associated with
the connection, the RTE of the ECU implementing the R-port shall map and convert the
data elements of the senders interface to the data elements of the receivers interface.
c(SRS_Rte_00182)
[SWS_Rte_07091] d The RTE shall support the Mapping of elements of composite
data types in the context of a mapping of SenderReceiverInterface, NvDataIn-
terface or ParameterInterface elements. c(SRS_Rte_00182, SRS_Rte_00234)
[SWS_Rte_07092] d The RTE of the ECU implementing the R-port shall map and con-
vert the composite data type elements of DataPrototypes of the senders interface
to the composite data type elements of DataPrototypes of the receivers interface
according the SubElementMapping
if a P-port specified by a SenderReceiverInterface, NvDataInterface or Pa-
rameterInterface is connected to an R-port with an incompatible interface and
a VariableAndParameterInterfaceMapping exists for both interfaces and is as-
sociated with the connection and
the SubElementMapping maps composite data type elements of the provided inter-
face to composite data type elements of the required interface. c(SRS_Rte_00182,
SRS_Rte_00234)
[SWS_Rte_07099] d The RTE of the ECU implementing the R-port shall map and con-
vert the composite data type elements of DataPrototype of the senders interface
to the primitive DataPrototype of the receivers interface according the SubEle-
mentMapping
if a P-port specified by a SenderReceiverInterface, NvDataInterface or Pa-
rameterInterface is connected to a R-port with an incompatible interface and
a VariableAndParameterInterfaceMapping exists for both interfaces and is
associated with the connection and the SubElementMapping exclusively maps
one composite data type element of the provided interface c(SRS_Rte_00182,
SRS_Rte_00234)
According to [TPS_SWCT_01551], incomplete SubElementMappings are allowed
for unqueued communication, when unmapped dataElements on the receiver side
have an initValue.
Please note that the DataPrototypes of the provide port and DataPrototypes of
the require port might use exclusively ApplicationDataTypes, exclusively Imple-
mentationDataTypes or both kinds of AutosarDataTypes in a mixed manner.
[SWS_Rte_02307] d The RTE generator shall reject configurations that violate [con-
str_1300]. c()
[SWS_Rte_03817] d If a P-port specified by a SenderReceiverInterface or Nv-
DataInterface is connected to an R-port with an incompatible interface and no
VariableAndParameterInterfaceMapping for this pair of interfaces is associ-
ated with the connection, the RTE generator shall reject the input as an invalid config-
uration. c(SRS_Rte_00182, SRS_Rte_00018)
[SWS_Rte_03818] d The RTE shall support the mapping of client-server interface ele-
ments. c(SRS_Rte_00182)
[SWS_Rte_03819] d If a P-port specified by a ClientServerInterface is con-
nected to an R-port with an incompatible interface and a ClientServerInter-
faceMapping for both interfaces is associated with the connection, the RTE of the
ECU implementing the R-port, i. e. the client, shall map the operation and map and
convert the operation arguments of the clients interface to the operation arguments of
the servers interface. c(SRS_Rte_00182)
[SWS_Rte_04538] d The RTE of the receiving ECU shall perform the conversion
of each primitive element that is received over a communication bus and then
re-transformed from the representation specified by the baseType and the com-
puMethod of the ISignal.TransformationISignalProps.DataPrototype-
TransformationProps. networkRepresentationProps. c(SRS_Rte_00181)
[SWS_Rte_04539] d If the ISignal.TransformationISignalProps. DataPro-
totypeTransformationProps.networkRepresentationProps is not defined
for a primitive element of a transformed networkRepresentationProps, the RTE
of the receiving ECU shall perform the conversion of that primitive element based on
the baseType specified at the ImplementationDataType used by the RPortPro-
totype. c(SRS_Rte_00181)
Example 4.9
<COMPU-METHOD>
  <SHORT-NAME>cm_VoltageAtReceiver</SHORT-NAME>
  <CATEGORY>LINEAR</CATEGORY>
  <COMPU-INTERNAL-TO-PHYS>
    <COMPU-SCALES>
      <COMPU-SCALE>
        <COMPU-RATIONAL-COEFFS>
          <COMPU-NUMERATOR><V>16</V><V>1</V></COMPU-NUMERATOR>
          <COMPU-DENOMINATOR><V>8</V></COMPU-DENOMINATOR>
        </COMPU-RATIONAL-COEFFS>
      </COMPU-SCALE>
    </COMPU-SCALES>
  </COMPU-INTERNAL-TO-PHYS>
</COMPU-METHOD>
<COMPU-METHOD>
  <SHORT-NAME>cm_VoltageOnNetwork</SHORT-NAME>
  <CATEGORY>LINEAR</CATEGORY>
  <COMPU-INTERNAL-TO-PHYS>
    <COMPU-SCALES>
      <COMPU-SCALE>
        <COMPU-RATIONAL-COEFFS>
          <COMPU-NUMERATOR><V>1</V><V>1</V></COMPU-NUMERATOR>
          <COMPU-DENOMINATOR><V>2</V></COMPU-DENOMINATOR>
        </COMPU-RATIONAL-COEFFS>
      </COMPU-SCALE>
    </COMPU-SCALES>
  </COMPU-INTERNAL-TO-PHYS>
</COMPU-METHOD>
   9        = (u / 2                       ) - 1
  10       */
  11       u_NetworkRepresentation = (uint8) ((u >> 1) - 1);
  12       ...
  13   }
Example 4.10
              <MAPPING-DIRECTION>bidirectional</MAPPING-DIRECTION>
              <BITFIELD-TEXTTABLE-MASK-SECOND>
                0b00000100
              </BITFIELD-TEXTTABLE-MASK-SECOND>
              <VALUE-PAIRS>
                <TEXT-TABLE-VALUE-PAIR>
                  <FIRST-VALUE>0</FIRST-VALUE>
                  <SECOND-VALUE>0</SECOND-VALUE>
                </TEXT-TABLE-VALUE-PAIR>
                <TEXT-TABLE-VALUE-PAIR>
                  <FIRST-VALUE>1</FIRST-VALUE>
                  <SECOND-VALUE>4</SECOND-VALUE>
                </TEXT-TABLE-VALUE-PAIR>
              </VALUE-PAIRS>
            </TEXT-TABLE-MAPPING>
          </TEXT-TABLE-MAPPINGS>
        </DATA-PROTOTYPE-MAPPING>
      </DATA-MAPPINGS>
    </VARIABLE-AND-PARAMETER-INTERFACE-MAPPING>
  </PORT-INTERFACE-MAPPINGS>
</PORT-INTERFACE-MAPPING-SET>
Example 4.11
  <PORT-INTERFACE-MAPPINGS>
    <VARIABLE-AND-PARAMETER-INTERFACE-MAPPING>
      <SHORT-NAME>Mapping_BF32_BF4</SHORT-NAME>
      <DATA-MAPPINGS>
        <DATA-PROTOTYPE-MAPPING>
          <FIRST-DATA-PROTOTYPE-REF DEST="VARIABLE-DATA-PROTOTYPE">
            /Example/Interfaces/One/BF32
          </FIRST-DATA-PROTOTYPE-REF>
          <SECOND-DATA-PROTOTYPE-REF DEST="VARIABLE-DATA-PROTOTYPE">
            /Example/Interfaces/Two/BF4
          </SECOND-DATA-PROTOTYPE-REF>
          <TEXT-TABLE-MAPPINGS>
            <TEXT-TABLE-MAPPING>
              <IDENTICAL-MAPPING>true</IDENTICAL-MAPPING>
              <MAPPING-DIRECTION>firstToSecond</MAPPING-DIRECTION>
              <BITFIELD-TEXTTABLE-MASK-FIRST>
                0b00000000000000000000000000001111
              </BITFIELD-TEXTTABLE-MASK-FIRST>
              <BITFIELD-TEXTTABLE-MASK-SECOND>
                0b00001111
              </BITFIELD-TEXTTABLE-MASK-SECOND>
            </TEXT-TABLE-MAPPING>
          </TEXT-TABLE-MAPPINGS>
        </DATA-PROTOTYPE-MAPPING>
      </DATA-MAPPINGS>
    </VARIABLE-AND-PARAMETER-INTERFACE-MAPPING>
  </PORT-INTERFACE-MAPPINGS>
</PORT-INTERFACE-MAPPING-SET>
The intention of this specification is not to describe any mechanism that supports the
generation of identical conversion code for each implementation of an RTE generator.
Even if the generated C code for the conversion would be the same, the numerical
result of the conversion still depends on the microcontroller target and the compiler.
Strategies how to handle the conversion of values that are out of range of the target
representation are described in section 4.3.8.
[SWS_Rte_03833] d For the conversion between two texttable data representations
(enumerations or bitfields) described either by an ApplicationDataType or an Im-
plementationDataType (used for the specification of the network representation)
the RTE generator shall generate the data conversion code according to the Text-
TableMapping. This requirement also applies to the texttable part of a mixed linear
scaled and texttable data representation. c(SRS_Rte_00182)
A software component might try to send a value that is outside the range that is spec-
ified at a dataElement or ISignal. In case of different ranges the result of a data
conversion might also be a value that is out of range of the target representation. For a
safe handling of these use cases the RTE provides range checks during runtime. For
an overview see figure 4.48.
[SWS_Rte_08024] d Range checks during runtime shall occur after data invalidation,
i.e. first the handleNeverReceived check, then the invalidation check and lastly the
range check shall be effected. c(SRS_Rte_00180)
[SWS_Rte_03861] d The range check is intended to be performed according to the
following rule: If a upper/lower limit is specified at the DataConstr, this value shall be
taken for the range check. If it is not specified at the DataConstr, the highest/lowest
representable value of the datatype shall be used. c(SRS_Rte_00180)
Whether a range check is required is specified in case of intra ECU communication at
the handleOutOfRange attribute of the respective SenderComSpec or Receiver-
ComSpec and in case of inter ECU communication at the handleOutOfRange at-
tribute of ISignalProps of the sending or receiving ISignal.
Range checks during runtime for intra ECU communication at the senders side are
described in the following requirements:
[SWS_Rte_08026] d The RTE shall implement a range check of sent data in the
sending path of a particular component if the handleOutOfRange is defined at the
SenderComSpec and has any value other than none. In this case all receivers receive
the value after the range check was applied. c(SRS_Rte_00180)
[SWS_Rte_08039] d The RTE shall use the preceding limits ([SWS_Rte_07196]) from
the DataPrototype in the PPortPrototype or PRPortPrototype for the range
check of sent data in the sending path of a particular component if the handleOut-
OfRange is defined at the SenderComSpec. c(SRS_Rte_00180)
[SWS_Rte_03839] d If for a dataElement to be sent a SenderComSpec with han-
dleOutOfRange=ignore is provided, a range check shall be implemented in the
sending component. If the value is out of bounds, the sending of the dataElement
shall not be propagated. This means for a non-queued communication that the last
valid value will be propagated and for a queued communication that no value will be
enqueued.
In case of a composite datatype the sending of the whole dataElement shall not be
propagated, if any of the composite elements is out of bounds. c(SRS_Rte_00180)
[SWS_Rte_03840] d If for a dataElement to be sent a SenderComSpec with han-
dleOutOfRange=saturate is provided, a range check shall be implemented in the
sending component. If the value is out of bounds, the value actually sent shall be set
to the lower respectively the upper limit.
In case of a composite datatype each composite element whose actual value is out of
bounds shall be saturated. c(SRS_Rte_00180)
[SWS_Rte_03841] d If for a dataElement to be sent a NonqueuedSenderComSpec
with handleOutOfRange=default is provided, a range check shall be implemented
in the sending component. If the value is out of bounds and the initValue is not
equal to the invalidValue, the value actually sent shall be set to the initValue.
In case of a composite datatype each composite element whose actual value is out of
bounds shall be set to the initValue. c(SRS_Rte_00180)
[SWS_Rte_03842] d If for a dataElement to be sent a NonqueuedSenderComSpec
with handleOutOfRange=invalid is provided, a range check shall be implemented
in the sending component. If the value is out of bounds, the value actually sent shall
be set to the invalidValue.
In case of a composite datatype each composite element whose actual value is out of
bounds shall be set to the invalidValue. c(SRS_Rte_00180)
[SWS_Rte_03843] d If for a dataElement to be sent a QueuedSenderComSpec
with handleOutOfRange set to default or invalid is provided, the RTE generator
shall reject the input as an invalid configuration, since for a QueuedSenderComSpec
the attribute initValue is not defined (see SW-C Template [2]) and data invalidation
is not supported (see [SWS_Rte_06727]). c(SRS_Rte_00180)
Range checks during runtime for inter ECU communication at the senders side are
described in the following requirements:
[SWS_Rte_08027] d The RTE shall implement a range check of sent data in the send-
ing path of a particular signal if the handleOutOfRange is defined at the ISignal-
Props and has any value other than none. In this case only receivers of the specific
ISignal receive the value after the range check was applied. c(SRS_Rte_00180)
[SWS_Rte_08040] d The RTE shall use the limits from the ISignal for the range
check of sent data in the sending path of a particular signal if the handleOutOfRange
is defined at the ISignalProps. c(SRS_Rte_00180)
[SWS_Rte_08030] d If for an ISignal to be sent an ISignalProps with handle-
OutOfRange=ignore is provided, a range check shall be implemented in the sending
signal. If the value is out of bounds, the sending of the ISignal shall not be propa-
gated. In this case the RTE shall behave as if no sending occurred. c(SRS_Rte_00180)
[SWS_Rte_08031] d If for an ISignal to be sent an ISignalProps with handle-
OutOfRange=saturate is provided, a range check shall be implemented in the send-
ing signal. If the value is out of bounds, the value actually sent shall be set to the lower
respectively the upper limit. c(SRS_Rte_00180)
[SWS_Rte_08032] d If for an ISignal to be sent an ISignalProps with han-
dleOutOfRange=default is provided, a range check shall be implemented in the
sending signal. If the value is out of bounds and the initValue is not equal
to the invalidValue, the value actually sent shall be set to the initValue. c
(SRS_Rte_00180)
[SWS_Rte_08033] d If for an ISignal to be sent an ISignalProps with handle-
OutOfRange=invalid is provided, a range check shall be implemented in the send-
ing signal. If the value is out of bounds, the value actually sent shall be set to the
invalidValue. c(SRS_Rte_00180)
Range checks during runtime for intra ECU communication at the receivers side are
described in the following requirements:
[SWS_Rte_08028] d The RTE shall implement a range check in the receiving path of a
particular component if the handleOutOfRange is defined at the ReceiverComSpec
and has any value other than none. In this case the range check applies only for data
received by the particular component. c(SRS_Rte_00180)
[SWS_Rte_08041] d The RTE shall use the preceding limits ([SWS_Rte_07196]) from
the DataPrototype in the rPort for the range check of received data in the re-
ceiving path of a particular component if the handleOutOfRange is defined at the
ReceiverComSpec. c(SRS_Rte_00180)
[SWS_Rte_03845] d If for a dataElement to be received a ReceiverComSpec with
handleOutOfRange=ignore is provided, a range check shall be implemented in the
receiving component. If the value is out of bounds, the reception of the dataElement
shall not be propagated. This means for a non-queued communication that the last
valid value will be propagated and for a queued communication that no value will be
enqueued.
If the value of the received dataElement is out of bounds and a Nonqueue-
dReceiverComSpec with handleOutOfRangeStatus=indicate is provided, the
return value of the RTE shall be RTE_E_OUT_OF_RANGE.
In case of a composite datatype the reception of the whole dataElement shall not
be propagated, if any of the composite elements is out of bounds. If the handleOut-
OfRangeStatus attribute is set to indicate, the return value of the RTE shall be
RTE_E_OUT_OF_RANGE. c(SRS_Rte_00180)
[SWS_Rte_03846] d If for a dataElement to be received a ReceiverComSpec with
handleOutOfRange=saturate is provided, a range check shall be implemented in
the receiving component. If the value is out of bounds, the value actually received shall
be set to the lower respectively the upper limit.
no
                                                                                   RTE status
                                     Configuration
                                                                                                                          DE propagation
                                   handleOutOfRange          handleOutOfRange              handleOutOfRange
                                                              Status == silent5            Status == indicate4,5
                                                                                                 RTE_E_
                                          ignore                  RTE_E_OK                                                last valid value2
                                                                                              OUT_OF_RANGE
          out of            yes
                                                                                                 RTE_E_
         bounds?                         saturate                 RTE_E_OK                                                lower/upper limit
                                                                                              OUT_OF_RANGE
                                                                                                 RTE_E_
                                         default4                 RTE_E_OK                                                   init value3
                                                                                              OUT_OF_RANGE
              no
                                         invalid4              RTE_E_INVALID                   RTE_E_INVALID                invalid value
                                   1. If no valid value was received previously then the init value shall be propagated
                                   2. In case of queued communication the RTE behaves as if no value was enqueued
                                   3. Init value shall not be equal to invalid value
                  DE               4. Applicable only in combination with a non-queued COMSPEC
 RTE status                        5. Applicable only in combination with a receiver COMSPEC
              propagation
 RTE_E_OK           value
4.4          Modes
                               AtpStructureElement                                        AbstractEvent
                                                                                                                                         SwcModeSwitchEvent
                                  ExecutableEntity +startOnEvent                    AtpStructureElement
                     RunnableEntity                 0..1                            RTEEvent                                       +   activation :ModeActivationKind
         +   canBeInvokedConcurrently :Boolean
         +   symbol :CIdentifier                                                                                                                       0..*
+runnable
               atpVariation,atpSplitable
          +modeSwitchPoint *                                                     enumeration
                                                                                ModeActivationKind
                     AbstractAccessPoint
                     AtpStructureElement                                          onEntry                    instanceRef                    instanceRef
                              Identifiable                                        onExit
                    ModeSwitchPoint                                               onTransition
                        0..*
                     instanceRef
                                                                                                                                                       1..2
              +modeGroup        0..1                                                                                    +disabledMode       +mode
                                                                                                                                            0..*       {ordered}
                                               AtpPrototype        isOfType             atpVariation     +modeDeclaration                    AtpStructureElement
             ModeDeclarationGroupPrototype                                                                                  1..*                          Identifiable
                                                                                                                +initialMode               ModeDeclaration
 +   swCalibrationAccess :SwCalibrationAccessEnum [0..1]                     1
                                                                             {redefines                                       1 +      value :PositiveInteger [0..1]
                                                                    +type    atpType}
                                                                                                                                         +mode
                                                                                                                                            0..*        1..2
+managedModeGroup        0..*                             0..*                                        ARElement              +disabledInMode            {ordered}
                            +accessedModeGroup
                                                                                                     AtpBlueprint
                                                                                                 AtpBlueprintable
               atpVariation                 atpVariation                                             AtpType
                                                                              ModeDeclarationGroup
                                                                                                     instanceRef
                                   +startsOnEvent     1
                                                                                           AbstractEvent                                           BswScheduleEvent
                  BswSchedulableEntity
                                                                                    BswEvent                                             BswModeSwitchEvent
+ activation :ModeActivationKind
tion states as well as for specific application purposes. The specific definition of modes
and their use is not in the scope of this document.
The status of the modes will be notified to the AUTOSAR software-component mode
user by mode communication - mode switch notifications - as described in
the subsection 4.4.7. The port for receiving (or sending) a mode switch notifi-
cation is called
mode switch port.
A Basic Software Module mode users and the Basic Software Module mode man-
ager are not necessarily using ports. Basic Software Modules without AUTOSAR
Interfaces are connected via the configuration of the Basic Software Scheduler.
Entering and leaving modes is initiated by a mode manager. A mode manager might
be a basic software module, for example the Basic Software Mode Manager (BswM),
the communication manager (ComM), or the ECU state manager (EcuM). The mode
manager may also be an AUTOSAR SW-C. In this case, it is called an application
mode manager.
The mode manager contains the master state machine to represent the modes.
To provide modes, an AUTOSAR software-component (mode manager) has to ref-
erence a ModeDeclarationGroup by a ModeDeclarationGroupPrototype of a
provide mode switch port, see section 4.4.7. The ModeDeclarationGroup con-
tains the provided modes.
To implement the logic of mode switches, the RTE / Basic Software Scheduler needs
some basic information about the available modes. For this reason, RTE / Basic Soft-
ware Scheduler will make the following additional assumptions about the modes of one
ModeDeclarationGroup:
  1. [SWS_Rte_CONSTR_09013] Exactly one mode or one mode transition shall
     be active d Whenever any RunnableEntity or BswSchedulableEntity is
     running, there shall always be exactly one mode or one mode transition active of
     each ModeDeclarationGroupPrototype. c()
  2. Immediately after initialization of a mode machine instance, RTE / Basic
     Software Scheduler will execute a transition to the initial mode of each Mod-
     eDeclarationGroupPrototype (see [SWS_Rte_02544]).
        RTE / Basic Software Scheduler will enforce the mode disablings of the initial
        modes and trigger the on-entry ExecutableEntitys (if any defined) of the
        initial modes of every ModeDeclarationGroupPrototype immediately after
        initialization of the RTE / Basic Software Scheduler.
In other words, RTE / Basic Software Scheduler assumes, that the modes of one
ModeDeclarationGroupPrototype belong to exactly one state machine without
nested states. The state machines cover the whole lifetime of the atomic AUTOSAR
SW-Cs9 and mode dependent AUTOSAR Basic Software Modules 10 .
4.4.4    Order of actions taken by the RTE / Basic Software Scheduler upon inter-
         ception of a mode switch notification
This section describes what the communication of a mode switch to a mode user
actually does. What does the RTE Basic Software Scheduler do to switch a mode and
especially in which order.
Mode switch procedures
Depending on the needs of mode users for synchronicity, the mode machine instance
can be implemented with two different realizations.
    synchronous mode switching procedure
    asynchronous mode switching procedure
The differences between these two realizations are the omitted waiting conditions in
case of asynchronous mode switching procedure. For instance with asynchronous
  9
     The lifetime of an atomic AUTOSAR SW-C is considered to be the time span in which the SW-Cs
runnables are being executed.
  10
     The lifetime of an mode dependent AUTOSAR Basic Software Module is considered to be the time
span in which the Basic Software Schedulable Entities are being executed.
behavior a software component can not rely that all mode disabling dependent
ExecutableEntitys of the previous mode are terminated before on-entry Exe-
cutableEntitys and on-exit ExecutableEntitys are started. On one hand
this might put some effort to the software component designer to enable the compo-
nents implementation to support this kind of scheduling but on the other hand it enables
fast and lean mode switching.
[SWS_Rte_07150] d The RTE generator shall use the synchronous mode switching
procedure if at least one mode user of the mode machine instance does not sup-
port the asynchronous mode switch behavior. c(SRS_Rte_00143, SRS_Rte_00213)
[SWS_Rte_07151] d The RTE generator shall apply the asynchronous mode switch
behavior, if all mode users support the asynchronous mode switch behavior and
if it is configured for the related mode machine instance. c(SRS_Rte_00143,
SRS_Rte_00213)
Typical usage of modes to protect resources
RTE / Basic Software Scheduler can start and prevent the execution of RunnableEn-
titys and BswSchedulableEntity. In the context of mode switches,
    RTE / Basic Software Scheduler starts on-exit ExecutableEntitys for
     leaving the previous mode. This is typically used by clean up ExecutableEn-
     titys to free resources that were used during the previous mode.
    RTE / Basic Software Scheduler starts on-entry ExecutableEntitys for
     entering the next mode. This is typically used by initialization ExecutableEn-
     titys to allocate resources that are used in the next mode.
    And RTE / Basic Software Scheduler can prevent the execution of mode dis-
     abling dependent ExecutableEntitys within a mode. This is typically
     used with time triggered work ExecutableEntity that use a resource which is
     not available in a certain mode.
According to this use case, during the execution of clean up ExecutableEntitys
and initialization ExecutableEntitys the work ExecutableEntitys should be
disabled to protect the resource. Also, if the same resource is used (by different SW-
Cs) in two successive modes, the clean up ExecutableEntitys should be safely
terminated before the initialization ExecutableEntitys of the next mode are exe-
cuted (synchronous mode switching procedure). In summary, this would lead to the
following sequence of actions by the RTE / Basic Software Scheduler upon reception
of the mode switch notification:
  1. activate mode disablings for the next mode
  2. wait for the newly disabled ExecutableEntitys to terminate in case of syn-
     chronous mode switching procedure
  3. execute clean up ExecutableEntitys
  4. wait for the clean up ExecutableEntitys to terminate in case of synchronous
     mode switching procedure
Figure 4.50: This figure shall illustrate what kind of ExecutableEntities will run in what or-
der during a synchronous mode transition. The boxes indicate activated ExecutableEn-
tities. Mode disabling dependant ExecutableEntities are printed in blue (old mode) and
pink (new mode). on-exit, on-transition, and on-entry ExecutableEntity are printed in
red, yellow, and green.
Figure 4.51: This figure shall illustrate what kind of ExecutableEntity will run in what
order during an asynchronous mode transition where the ExecutableEntities are trig-
gered on a mode change are mapped to a higher priority task than the Mode Dependent
ExecutableEntity. The boxes indicate activated ExecutableEntity. Mode disabling de-
pendant ExecutableEntity are printed in blue (old mode) and pink (new mode). on-exit,
on-transition, and on-entry ExecutableEntity are printed in red, yellow, and green.
The remainder of this section lists the requirements that guarantee the behavior de-
scribed above.
All runnables with dependencies on modes have to be executed or terminated during
mode transitions. Restriction [SWS_Rte_02500] requires these runnables to be of
category 1 to guarantee finite execution time.
For simplicity of the implementation to guarantee the order of runnable executions, the
following restriction is made:
All on-entry ExecutableEntitys, on-transition ExecutableEntitys,
and on-exit ExecutableEntitys of the same mode machine instance
should be mapped to the same task in the execution order following on-exit,
on-transition, on-entry (see [SWS_Rte_02662]).
A mode machine instance implementing an asynchronous mode switch proce-
dure might be fully implemented inside the Rte_Switch or SchM_Switch API. In
this case the on-entry ExecutableEntitys, on-transition ExecutableEn-
titys, on-exit ExecutableEntitys and ModeSwitchAck ExecutableEn-
titys are not mapped to tasks as described in chapter 7.5.1.
[SWS_Rte_07173] d The RTE generator shall support invocation of on-entry
ExecutableEntitys, on-transition ExecutableEntitys, on-exit Exe-
cutableEntitys and ModeSwitchAck ExecutableEntitys via direct function
call, if all following conditions are fulfilled:
    if the asynchronous mode switch behavior is configured (see [SWS_Rte_07151])
  3. [SWS_Rte_02562],
  4. [SWS_Rte_07153],
  5. [SWS_Rte_02707],
  6. [SWS_Rte_02708],
  7. [SWS_Rte_02564],
  8. [SWS_Rte_07154],
  9. [SWS_Rte_02563] (The transition is completed with this step), and
 10. immediately followed by [SWS_Rte_02587]
shall be executed in the order as listed for a core local mode user group. If a step is
not applicable, the order of the remaining steps shall be unchanged.
If mode users are belonging to different core local mode user group the steps 1. - 9.
may be executed in parallel on the different cores. The step 10. is executed if the
step 1. - 9. is finished for the whole mode machine instance. c(SRS_Rte_00143,
SRS_Rte_00213)
In the case that mode users belonging to the same mode machine instance are
mapped to different partitions which in turn are scheduled on different micro controller
cores the sequence described in [SWS_Rte_02665] can be parallelized.
[SWS_Rte_02668] d Immediately after the execution of a transition as described
in [SWS_Rte_02665], RTE / Basic Software Scheduler shall check the queue for
pending mode switch notifications of this mode machine instance. If a
mode switch notification can be dequeued, the mode machine instance
shall enter the corresponding transition directly as described by the sequence in
[SWS_Rte_02665]. c(SRS_Rte_00143, SRS_Rte_00213)
In the case of a fast sequence of two mode switches, the Rte_Mode or SchM_Mode
API will not indicate an intermediate mode, if a mode switch notification to the
next mode is indicated before the transition to the intermediate mode is completed.
[SWS_Rte_02630] d In case of synchronous mode switch procedure, the RTE shall ex-
ecute all steps of a mode switch (see [SWS_Rte_02665]) synchronously for the whole
mode machine instance. c(SRS_Rte_00143, SRS_Rte_00213)
I.e., the mode transitions will be executed synchronously for all mode users that are
connected to the same mode managers ModeDeclarationGroupPrototype.
[SWS_Rte_02669] d If the next mode and the previous mode of a transition are the
same, the transition shall still be executed. c(SRS_Rte_00143, SRS_Rte_00213)
    [SWS_Rte_02587]
If applicable, the steps described by the following requirements still have to be executed
for entering the initial mode:
    [SWS_Rte_02661],
    [SWS_Rte_02564]
c(SRS_Rte_00143, SRS_Rte_00144, SRS_Rte_00116)
[SWS_Rte_07532] d Basic Software Scheduler shall initiate the transition to the initial
modes of each mode machine instance belonging to the Basic Software Sched-
uler during SchM_Init. During the transition to the initial modes, the steps defined in
the following requirements have to be omitted as no previous mode is defined:
    [SWS_Rte_02562],
    [SWS_Rte_07153],
    [SWS_Rte_02707],
    [SWS_Rte_02708],
    [SWS_Rte_02563],
    [SWS_Rte_02587]
If applicable, the steps described by the following requirements still have to be executed
for entering the initial mode:
    [SWS_Rte_02661],
    [SWS_Rte_02564]
c(SRS_Rte_00213)
                             ARElement
                                                                                                                              AtpBlueprintable
                            AtpBlueprint +component                                                     +port
                                                                                                                                 AtpPrototype
                        AtpBlueprintable
                                AtpType                   atpVariation,atpSplitable                      0..*           PortPrototype
               SwComponentType
                                                   atpVariation Tags:
                                                   vh.latestBindingTime =
                                                   preCompileTime
AbstractRequiredPortPrototype AbstractProvidedPortPrototype
AtomicSwComponentType
                                                                                      +rPort    *                                                          +pPort      *
                                                                                      isOfType                           isOfType                           isOfType
                                                                            +   isService :Boolean
                               ARElement
                                                                            +   serviceKind :ServiceProviderEnum [0..1]
                      AtpStructureElement
                SwcBswMapping
ModeSwitchInterface
                 atpVariation                                                                                                    1
+synchronizedModeGroup 0..*                                                                                         +modeGroup 1
                                                                                                                                                   AtpPrototype
    SwcBswSynchronizedModeGroupPrototype                                    +bswModeGroup
                                                                                                                  ModeDeclarationGroupPrototype
                                                                                        1
                                                                            +swcModeGroup +         swCalibrationAccess :SwCalibrationAccessEnum [0..1]
instanceRef 1
                               ARElement                            +providedModeGroup
                             AtpBlueprint
                         AtpBlueprintable          atpVariation,atpSplitable           0..*
                      AtpStructureElement
             BswModuleDescription                                   +requiredModeGroup
       +   moduleId :PositiveInteger [0..1]        atpVariation,atpSplitable           0..*
                                                                                                    atpVariation
                                                                                     +modeDeclaration 1..*                                 +initialMode    1
                                                                                                                                   AtpStructureElement
                                                                                                                                            Identifiable
                                                                                                                        ModeDeclaration
In case of mode switch communication, the mode manager may specify a Mod-
eSwitchedAckEvent or BswModeSwitchedAckEvent to receive a notification from
the RTE that the mode transition has been completed, see [SWS_Rte_02679] and
[SWS_Rte_07559].
The ModeSwitchedAckEvent is triggered by the RTE regardless which runnable en-
tity has requested the mode switch notification, even if the meta model implies a link to
a specific ModeSwitchPoint.
[SWS_Rte_02679] d If acknowledgment is enabled for a provided Mod-
eDeclarationGroupPrototype and a ModeSwitchedAckEvent references a
RunnableEntity as well as the ModeDeclarationGroupPrototype, the
RunnableEntity shall be activated when the mode switch acknowledgment occurs
or when the RTE detects that any partition to which the mode users are mapped was
stopped or restarted or when a timeout was detected by the RTE. c(SRS_Rte_00051,
SRS_Rte_00143)
The related Entry Point Prototype is defined in [SWS_Rte_02512].
[SWS_Rte_07559] d If acknowledgment is enabled for a provided (providedMode-
Group) ModeDeclarationGroupPrototype and a BswModeSwitchedAckEvent
references a BswSchedulableEntity as well as the ModeDeclarationGroup-
Prototype, the BswSchedulableEntity shall be activated when the mode switch
acknowledgment occurs or when a timeout was detected by the Basic Software Sched-
uler. [SWS_Rte_02587]. c(SRS_Rte_00213, SRS_Rte_00143)
The related Entry Point Prototype is defined in [SWS_Rte_04542].
Requirement [SWS_Rte_02679] and [SWS_Rte_07559] merely affects when the runn-
able is activated. The Rte_SwitchAck and SchM_SwitchAck shall still be created,
according to requirement [SWS_Rte_02678] and [SWS_Rte_07558] to actually read
the acknowledgment.
[SWS_Rte_02730] d A ModeSwitchedAckEvent that references a RunnableEn-
tity and is referenced by a WaitPoint shall be an invalid configuration which is re-
jected by the RTE generator. c(SRS_Rte_00051, SRS_Rte_00018, SRS_Rte_00143)
The attributes ModeSwitchedAckRequest and BswModeSwitchAckRequest allow
to specify a timeout.
[SWS_Rte_07056] d If ModeSwitchedAckRequest or BswModeSwitchAckRe-
quest with a timeout greater than zero is specified, the RTE shall ensure that timeout
monitoring is performed, regardless of the receive mode of the acknowledgment. c
(SRS_Rte_00069, SRS_Rte_00143)
[SWS_Rte_07060] d Regardless of an occurred timeout during a mode transition
the RTE shall complete the transition of a mode machine instance as defined in
[SWS_Rte_02665]. c(SRS_Rte_00069, SRS_Rte_00143)
Since the mode switch communication may cross partitions basically two error scenar-
ios are possible:
    The partition of the mode users gets terminated.
    The partition of the mode manager gets terminated.
In both cases additionally the terminated partition may be restarted. For both error
scenarios the RTE offers functionality to handle the errors.
When a mode manager is getting out of sync with the mode user(s) (because the
partition of the mode user has been terminated) a sequence of error reactions is
defined.
This shall support on the one hand to inform the mode manager about the fact that
the mode users are absent. This might be used by the mode manager to set internal
states. This supports an active error handling by the mode manager as well as a
synchronization of the mode manager to the mode users partition restart.
Furthermore the RTE offers the ability to switch into a default mode automatically. This
feature can be used to ensure that either the mode users are re-initialized as during
ECU start (default mode is initial mode) or that the mode users are re-initialized by
a dedicated mode (default mode is different from initial mode) which in turn may be
used to ensure a secure behavior of the mode users, for instance suppressing the
actuator self tests in the running system.
Please note that the application of a default mode during mode user partition restart for
modes communicated cross partitions cannot be applied since this would disturb the
execution of the fault free partitions. For this scenario the only applicable error reaction
is modeManagerErrorBehavior.errorReactionPolicy set to lastMode. Other
configurations are rejected, see [SWS_Rte_08788].
[SWS_Rte_06794] d The RTE Generator shall take the modeManagerErrorBehav-
ior from the ModeDeclarationGroup typing the ModeDeclarationGroupPro-
totype in the ModeSwitchInterface of the PPortPrototype/PRPortProto-
type. c(SRS_Rte_00143, SRS_Rte_00144)
[SWS_Rte_06772] d The RTE shall clear all mode switch notifications in the
queue when all partitions of the mode userss are terminated. c(SRS_Rte_00143,
SRS_Rte_00144)
[SWS_Rte_06773] d The RTE shall activate RunnableEntitys triggered by a Swc-
ModeManagerErrorEvent when all partitions of the mode userss are terminated.
c(SRS_Rte_00143, SRS_Rte_00144)
[SWS_Rte_06774] d If ModeSwitchedAckRequest or BswModeSwitchAckRe-
quest is specified, the RTE shall detect a timeout when mode users partitions are
terminated during an ongoing transition. c(SRS_Rte_00143, SRS_Rte_00144)
Also see [SWS_Rte_02679], [SWS_Rte_07559], and [SWS_Rte_03853].
The further behavior of the mode machine instance depends on the attribute
ModeDeclarationGroup.modeUserErrorBehavior.
[SWS_Rte_06775] d If the attribute modeManagerErrorBehavior.errorReac-
tionPolicy is set to lastMode the mode machine instance stays in the last
mode before the termination of the mode users. If the partition of the mode users
gets terminated during an ongoing transition the last mode is the next mode of the
transition. c(SRS_Rte_00143, SRS_Rte_00144)
Please note: In case the partition of the mode users gets terminated during an on-
going transition logically the transition is still completed even if the mode users didnt
"survive" the transition.
[SWS_Rte_06776] d If the attribute modeManagerErrorBehavior.errorReac-
tionPolicy is set to defaultMode the RTE shall enqueue the mode defined
by modeManagerErrorBehavior.defaultMode to the mode switch notifi-
cation queue. c(SRS_Rte_00143, SRS_Rte_00144)
If the ModeSwitchInterface does not define a specific modeManagerErrorBe-
havior the RTE uses the initialMode as a default mode.
[SWS_Rte_06777] d If the attribute modeManagerErrorBehavior is not defined the
RTE shall enqueue the mode defined by initialMode to the mode switch noti-
fication queue. c(SRS_Rte_00143, SRS_Rte_00144)
[SWS_Rte_06778] d The RTE shall execute the error reactions in case the partition of
the mode users gets terminated in following order:
  1. [SWS_Rte_06772]
  2. [SWS_Rte_06773]
  3. [SWS_Rte_06774]
  4. [SWS_Rte_06775] or [SWS_Rte_06776] or [SWS_Rte_06777]
c(SRS_Rte_00143, SRS_Rte_00144)
If the partition of the mode users is capable to restart (PartitionCanBeRestarted
== true) the mode manager shall be able to enqueue new mode switch requests
during the restart of the partition. This shall support a dedicated error handling by the
mode manager depending on other environmental conditions. In this case the mode
manager may decide which transitions are appropriate to get the mode users either
back in an operational mode or in a secure default mode. Therefore the errorReac-
tionPolicy equals lastMode avoids any automatically forced mode transitions by
the error handling of the RTE.
[SWS_Rte_06779] d RTE shall support the enqueueing of new mode switch requests
during the restart of the mode users partition by the mode manager after the call of
Rte_PartitionRestarting. c(SRS_Rte_00143, SRS_Rte_00144)
[SWS_Rte_06780] d When the partition with the mode users is restarted (after call of
Rte_PartitionRestart), RTE shall dequeue queued mode switch notifica-
tions. c(SRS_Rte_00143, SRS_Rte_00144)
When the first mode switch notification after a partition restart is dequeued
the previous mode is defined as "last mode" or "on transition" depending on the
modeManagerErrorBehavior.errorReactionPolicy. See [SWS_Rte_06783]
and [SWS_Rte_06784].
Initialization of mode machine instance during mode users partition restart
Depending on the modeManagerErrorBehavior the RTE has to re-initialize the
mode machine instance during the restart of the mode users partition. In
case modeManagerErrorBehavior.errorReactionPolicy is set to default-
Mode the behavior is similar as during the transition to the initial mode (see
[SWS_Rte_02544]). During the initialization of the RTE resources for a restarting mode
user partition only a subset of the single steps of a mode transition is applicable.
[SWS_Rte_06796] d During the transition to the default mode (next mode is default
mode) of mode machine instances when the mode users partition restarts, the
steps defined in the following requirements have to be omitted as no previous mode is
applicable:
    [SWS_Rte_02562],
    [SWS_Rte_07153],
    [SWS_Rte_02707],
    [SWS_Rte_02708],
    [SWS_Rte_02563],
    [SWS_Rte_02587]
If applicable, the steps described by the following requirements still have to be executed
for entering the default mode:
    [SWS_Rte_02661],
    [SWS_Rte_02564]
c(SRS_Rte_00143, SRS_Rte_00144)
In case modeManagerErrorBehavior.errorReactionPolicy is set to last-
Mode the behavior indicates a stable mode during the re-initialization in order to provide
the means to the mode manager to explicitly decide on the appropriate mode to han-
dle the fault.
[SWS_Rte_06797] d If the attribute modeManagerErrorBehavior.errorReac-
tionPolicy is set to lastMode the RTE / Basic Software Scheduler shall ac-
tivate the mode disablings of the last mode during the partition restart, if any
mode disabling dependencys for that mode are defined. c(SRS_Rte_00143,
SRS_Rte_00144)
When a mode user gets out of sync with the mode manager (because the partition
of the mode manager has been terminated) a sequence of error reactions is defined.
Hereby the RTE offers the ability to automatically switch into a default mode. This
feature can be used to ensure that the mode users are automatically switched into
a defined mode which in turn may be used to ensure a secure behavior of the mode
users, for instance switching off some actuators.
As an alternative the mode machine instance can stay in the last mode which can
be used to keep the "status quo" until the mode manager is restarted.
[SWS_Rte_06795] d The RTE Generator shall take the modeUserErrorBehav-
ior from the ModeDeclarationGroup typing the ModeDeclarationGroupPro-
totype in the ModeSwitchInterface of the PPortPrototype/PRPortProto-
type. c(SRS_Rte_00143, SRS_Rte_00144)
[SWS_Rte_06785] d If the partition of the mode manager gets terminated during
an ongoing transition, the RTE shall complete the transition. c(SRS_Rte_00143,
SRS_Rte_00144)
[SWS_Rte_06786] d If the partition of the mode manager gets terminated dur-
ing an ongoing transition, the RTE shall skip the mode switch acknowledg-
ment. c(SRS_Rte_00143, SRS_Rte_00144) For mode switch acknowledgment see
[SWS_Rte_02587] and section 4.4.8
[SWS_Rte_06787] d The RTE shall clear all mode switch notifications in the
queue when the partition of the mode manager gets terminated and after an ongoing
transition is completed. c(SRS_Rte_00143, SRS_Rte_00144)
[SWS_Rte_06788] d If the attribute modeUserErrorBehavior.errorReaction-
Policy is set to lastMode the mode machine instance stays in the last mode
before the termination of the mode manager. c(SRS_Rte_00143, SRS_Rte_00144)
[SWS_Rte_06789] d If the attribute modeUserErrorBehavior.errorReaction-
Policy is set to defaultMode the RTE shall enqueue the mode defined by
modeUserErrorBehavior.defaultMode to the mode switch notification
queue. c(SRS_Rte_00143, SRS_Rte_00144)
[SWS_Rte_06790] d If the attribute modeUserErrorBehavior is not defined the RTE
shall enqueue the mode defined by initialMode to the mode switch notifica-
tion queue. c(SRS_Rte_00143, SRS_Rte_00144)
[SWS_Rte_06791] d The RTE shall execute the error reactions in case the partition of
the mode manager gets terminated in the following order:
  1. [SWS_Rte_06785], [SWS_Rte_06786]
  2. [SWS_Rte_06787]
  3. [SWS_Rte_06788] or [SWS_Rte_06789] or [SWS_Rte_06790]
c(SRS_Rte_00143, SRS_Rte_00144)
[SWS_Rte_06792] d The RTE shall dequeue queued mode switch notifica-
tions and execute them regardless whether the partition with the mode manager
is terminated, restarting or restarted. Thereby the restart of the mode managers
partition shall not abort the ongoing transition of a mode machine instance. c
(SRS_Rte_00143, SRS_Rte_00144)
This ensures that the defaultMode in the mode switch notification queue
gets effective.
[SWS_Rte_06793] d The RTE shall activate RunnableEntitys triggered by a Swc-
ModeManagerErrorEvent when the partition of the mode manager is restarted. c
(SRS_Rte_00143, SRS_Rte_00144)
There exist several use cases (especially if software is reused), where mode users
are connected to mode managers providing ModeDeclarationGroups with differ-
ent ModeDeclarations than the user.
Examples:
    A mode manager can be able to differentiate more fin grained sub states as it
     is required by the generic mode user. But due to the definition of the mode
      communication it is not possible to use two p-ports at the mode manager be-
      cause this would lead to two independent and unsynchronized mode machine
      instances in the RTE.
    A generic mode user can support additionally modes which are not used by all
     mode managers.
This would normally lead to an error as incompatible ports are connected. To overcome
this limitation the Software Component Template [2] provides a mapping between dif-
ferent ModeDeclarations so that the RTE can translated on mode to the other.
[SWS_Rte_08511] d If a ModeDeclaration of a mode user is mapped to a sin-
gle ModeDeclaration of a mode manager the related mode of the mode user is
entered or exit when the mapped mode of the mode manager is entered or exit. c
(SRS_Rte_00236)
[SWS_Rte_08512] d If one ModeDeclaration of a mode user is mapped to sev-
eral ModeDeclarations of a mode manager the related mode of the mode user
is entered when any of the mapped modes of the mode manager mapped by one
modeDeclarationMapping is entered. The related mode of the mode user is exit
when any of the mapped modes of the mode manager mapped by one modeDecla-
rationMapping is exit and if the new mode is not mapped by the same modeDec-
larationMapping to related mode of the mode user. c(SRS_Rte_00236)
Note: If one ModeDeclaration of a mode user is mapped to several ModeDecla-
rations of a mode manager by the means of several modeDeclarationMappings
the semantics is defined in a way that the individual mode transitions of the mode man-
ager are getting visible as exit and enter events for the mode user. Further on the
transition phase gets visible by the RTE_TRANSITION return value in the case that
Rte_Mode-API is called during such a transition phase.
If one ModeDeclaration of a mode user is mapped to several ModeDeclara-
tions of a mode manager by the means of a single modeDeclarationMapping
the semantics is defined in a way that the individual mode transitions of the mode
manager are not visible for the mode user.
Example:
The mode manager and the mode user have different ModeDeclaration-
Groups which are mapped by several modeDeclarationMappings. The Mode-
DeclarationGroup of the mode manager is more fine grained, so more than one
of its ModeDeclarations has to be mapped onto the same ModeDeclaration of
the mode user. The modeDeclarationMappings can be seen in table 4.13. The
complete example is listed as ARXML in Appendix F.1.
 modeDeclarationMapping          ModeDeclarations of the    Mapped     ModeDeclara-
                                 mode manager               tions of the mode user
 StartUp_2_STARTUP               StartUp                    STARTUP
 Run_2_RUN                       Run                        RUN
 PostRunX_2_POST_RUN             PostRun1                   POST_RUN
                                 PostRun2
 ShutDown_2_SHUTDOWN             ShutDown                   SHUTDOWN
Table 4.14 shows a possible scenario how mode transitions of a mode manager
will be seen from the point of view of a mode user when the modeDeclaration-
Mapping maps more than one ModeDeclaration of the mode managers Mode-
DeclarationGroup onto the same ModeDeclaration of the mode users Mode-
DeclarationGroup.
 Mode transitions of the                       Mode transitions of the
 mode manager                                  mode user resulting out of the mapping
 Undefined  StartUp                           Undefined  STARTUP
 StartUp  Run                                 STARTUP  RUN
 Run  PostRun1                                RUN  POST_RUN
 PostRun1  PostRun2                            (no transition)
 PostRun2  ShutDown                           POST_RUN  SHUTDOWN
 ShutDown  Sleep                              SHUTDOWN  SHUTDOWN
 Sleep  Hibernate                              (no transition)
Table 4.14: Possible scenario of mode transitions by the mode manager and the result-
ing transitions from the point of view of the mode user
4.5.1.1 Introduction
                               ARElement                                                                                           AtpBlueprintable
                              AtpBlueprint +component                                                    +port                        AtpPrototype
                          AtpBlueprintable                                                                            Components::PortPrototype
                                  AtpType                  atpVariation,atpSplitable                    0..*
          Components::SwComponentType
                                               atpVariation Tags:
                                               vh.latestBindingTime =
                                               preCompileTime
       Components::AtomicSwComponentType
                                                                                     Components::                                                            Components::
                                                                             AbstractRequiredPortPrototype                                           AbstractProvidedPortPrototype
                                                                             +     isService :Boolean
                              ARElement                                      +     serviceKind :ServiceProviderEnum [0..1]
                     AtpStructureElement
      SwcBswMapping::SwcBswMapping
PortInterface::TriggerInterface
              atpVariation
+synchronizedTrigger  0..*                                                                                                 +trigger 1..*
                                                                                        +swcTrigger                                   AtpStructureElement
             SwcBswMapping::
         SwcBswSynchronizedTrigger                          instanceRef                                                                      Identifiable
                                                                                                     1
                                                                                                                      TriggerDeclaration::Trigger
                                                  atpVariation Tags:
                                                                                                     1
                                                  vh.latestBindingTime =
                                                  preCompileTime
                                  ARElement
                                AtpBlueprint                                       +releasedTrigger
                            AtpBlueprintable
                                                         atpVariation,atpSplitable            0..*
                         AtpStructureElement
     BswOverview::BswModuleDescription                                             +requiredTrigger
                                           atpVariation Tags:
                                           vh.latestBindingTime =
                                           preCompileTime
4.5.1.4 Multiplicity
The execution order of the triggered ExecutableEntitys in the trigger sinks de-
pends from the RteEventToTaskMapping described in chapter 7.5.1 and the con-
figured priorities of the operating system.
The RTE generator does not support multiple trigger sources communicating
events to the same Trigger in a trigger sink (n : 1 communication where n > 1).
[SWS_Rte_07039] d The RTE generator shall reject configurations where multiple
trigger sources communicating events to the same Trigger in a trigger sink
(n : 1 communication where n > 1). c(SRS_Rte_00018)
[SWS_Rte_CONSTR_09008] The same Trigger in a trigger sink must not be
connected to multiple trigger sources d The same Trigger in a trigger sink must
not be connected to multiple trigger sources. c()
Note: This shall ensure in the combination with the existence conditions
of the Rte_Trigger and SchM_Trigger that only one kind of Trigger API
([SWS_Rte_07201] and [SWS_Rte_07264]) or the direct task activation is offered to
the implementation of the trigger source.
With the mechanism of Inter Runnable Triggering one Runnable Entity is able to re-
quest the activation of Runnable Entities of the same software-component instance.
[SWS_Rte_07220] d The RTE shall support Inter Runnable Triggering.                   c
(SRS_Rte_00163)
Similar to External Trigger Event Communication (described in chapter 4.5.1) the acti-
vation of triggered runnables can be implemented by means of activating an Operating
System Task or by direct function call.
[SWS_Rte_07555] d The call of the Rte_IrTrigger API shall activate all trig-
gered runnables which InternalTriggerOccurredEvents are associated with the re-
lated InternalTriggeringPoint of the same software-component instance if either no
queuing for the InternalTriggeringPoint is configured or if queuing for the
InternalTriggeringPoint is configured and the trigger queue is empty. c
(SRS_Rte_00163)
[SWS_Rte_07221] d The RTE shall support for Inter Runnable Triggering that trig-
gered runnables entities are invoked via OS Task activation. c(SRS_Rte_00163)
[SWS_Rte_07224] d The RTE shall support for Inter Runnable Triggering that trig-
gered runnables are invoked via direct function call if all of the following conditions
are fulfilled:
    none of the triggered BswSchedulableEntitys activated by this In-
     ternalTriggeringPoint define a minimum start distance
    no queuing for the InternalTriggeringPointis configured
c(SRS_Rte_00163)
4.5.2.1 Multiplicity
The execution order of the runnable entities in the trigger sinks depends from the Runn-
able Entity to task mapping described in chapter 7.5.1 and the configured priorities of
the operating system.
The Inter Basic Software Module Entity Triggering is similar to the mechanism of In-
ter Runnable Triggering (see chapter 4.5.2) with the exception that it is used inside a
Basic Software Module. It can be used to request the activation of a BswSchedula-
bleEntity by a Basic Software Entity of the same a Basic Software Module instance.
[SWS_Rte_07551] d The Basic Software Scheduler shall support Inter Basic Software
Module Entity Triggering. c(SRS_Rte_00230)
Similar to External Trigger Event Communication (described in chapter 4.5.1) the acti-
vation of triggered BswSchedulableEntity can be implemented by means of acti-
vating an Operating System Task or by direct function call.
[SWS_Rte_07552] d The call of the SchM_ActMainFunction API shall acti-
vate all triggered BswSchedulableEntitys which BswInternalTriggerOccurre-
dEvents are associated by the related activationPoint of the same a Basic Software
Module instance if either no queuing for the BswInternalTriggeringPoint is con-
figured or if queuing for the BswInternalTriggeringPoint is configured and the
trigger queue is empty.. c(SRS_Rte_00230)
[SWS_Rte_07553] d The Basic Software Scheduler shall support for Inter Basic Soft-
ware Module Entity Triggering that triggered BswSchedulableEntitys are in-
voked via OS Task activation. c(SRS_Rte_00230)
[SWS_Rte_07554] d The Basic Software Scheduler shall support for Inter Basic Soft-
ware Module Entity Triggering that triggered BswSchedulableEntitys are in-
voked via direct function call if
    the triggered BswSchedulableEntitys do not define a minimum start dis-
     tance
    if the preconditions of constraint [constr_4086] are fulfilled
    no queuing for the BswInternalTriggeringPointis configured
c(SRS_Rte_00230)
Note: Typically the feature of Inter Basic Software Module Entity Triggering is used
to decouple the execution context of Basic Software Entities. But if this decoupling
is really required depends from the particular scheduling concept and microcontroller
performance.
The queuing of triggers ensures that the number of executions of triggered Ex-
ecutableEntitys is equal to the number of released triggers. Further on it en-
sures that the number of activations of triggered ExecutableEntitys is equal for
all associated triggered ExecutableEntitys of a trigger emitter if the as-
sociated triggered ExecutableEntitys are not activated by other RTEEvents.
Therefore the trigger queue is rather a counter than a real queue.
[SWS_Rte_07087] d The RTE shall support the queuing of triggers for
    External Trigger Event Communication
    Inter Runnable Triggering
    Inter Basic Software Module Entity Triggering
RTE and Basic Software Scheduler have a nested life cycle.           It is only
permitted to initialize the RTE if the Basic Software Scheduler is initialized
([SWS_Rte_CONSTR_09036]). Further on it is only supported to finalize the Basic
Software Scheduler after the RTE is finalized ([SWS_Rte_CONSTR_09056]).
                 EcuM                                   Basic Software           RTE
                                                          Scheduler
SchM_Init()
RTE initialized
Rte_Stop()
SchM_Deinit()
Figure 4.55: Nested life cycle of RTE and Basic Software Scheduler
Before the Basic Software Scheduler is initialized only the API calls SchM_Enter and
SchM_Exit are available ([SWS_Rte_07578]).
The ECU state manager calls the startup routine SchM_Init of the Basic Software
Scheduler before any Basic Software Module needs to be scheduled.
The initialization routine of the Basic Software Scheduler will return within finite execu-
tion time (see [SWS_Rte_07273]).
The Basic Software Scheduler will initialize the mode machine instances
([SWS_Rte_02544])assigned to the Basic Software Scheduler. This will activate the
mode disablings of all initial modes during SchM_Init and trigger the execution
of the on-entry ExecutableEntitys of the initial modes. After initialization of the
Basic Software Scheduler internal data structure and mode machine instances
the activation of Basic Software Schedulable Entities triggered by BswTimingEvents
starts.
[SWS_Rte_07574] d The call of SchM_StartTiming shall start the activation of
BswSchedulableEntitys triggered by BswTimingEvents. c(SRS_Rte_00211)
[SWS_Rte_07584] d The call of SchM_Init shall start the activation of BswSchedu-
lableEntitys triggered by BswBackgroundEvents. c(SRS_Rte_00211)
Note: In case of OS task where BswEvents and RTEEvents are mapped to the RTE
Generator has to ensure, that RunnableEntitys are not activated before the RTE is
initialized or after the RTE is finalized. See [SWS_Rte_07580] and [SWS_Rte_02538].
[SWS_Rte_07580] d The Basic Software Scheduler has to prevent the activation of
RunnableEntitys before the RTE is initialized. c(SRS_Rte_00220)
The ECU state manager calls the startup routine Rte_Start of the RTE at the end of
startup phase II when the OS is available and all basic software modules are initialized.
The initialization routine of the RTE will return within finite execution time (see
[SWS_Rte_02585]).
Before the RTE is initialized completely, there is only a limited capability of RTE to
handle incoming data from COM:
The RTE will initialize the mode machine instances ([SWS_Rte_02544]) assigned
to the RTE. This will activate the mode disablings of all initial modes during
Rte_Start and trigger the execution of the on-entry ExecutableEntitys of
the initial modes. Further on for common mode machine instances the on-entry
Runnable Entities of the current active mode are executed during the initialization of
the RTE ([SWS_Rte_07582]). common mode machine instances can not enter
the transition phase during RTE initialization ([SWS_Rte_07583]).
Partitions of the ECU can be stopped and restarted. In a stopped or restarting parti-
tion, the OS has killed all running tasks. RTE has to react to stopping and restarting
partitions.
The RTE does not execute ExecutableEntitys of a terminated or restarting parti-
tion.
[SWS_Rte_07604] d The RTE shall not activate, start or release ExecutableEntity
execution-instances of a terminated or restarting partition. c(SRS_Rte_00195)
The RTE is notified of the termination (respectively, the beginning of
restart) of a partition by the Rte_PartitionTerminated (respectively,
Rte_PartitionRestarting) API. At this point in time, the tasks containing
the runnables of this partition are already killed by the OS. In case of restart, RTE
is notified by the Rte_RestartPartition API when the communication can be
re-initialized and re-enabled.
[SWS_Rte_07604] also applies to ExecutableEntitys whose execution started be-
fore the notification to the RTE. RTE can rely on the OS functionality to stop or restart
an OS application and all related OS objects.
When a partition is restarted, the RTE will restore an initial environment for its SW-Cs.
[SWS_Rte_02735] d When the Rte_RestartPartition API for a partition is called,
the RTE shall restore an initial environment for its SW-Cs on this partition. c()
The SW-Cs themselves are responsible to restore their internal initial environment and
should not rely on any initialization performed by the compiler. This should be done in
initialization runnables.
[SWS_Rte_07610] d The RTE Generator shall reject configurations where the
handleTerminationAndRestart attribute of a SW-C is not set to can-
BeTerminatedAndRestarted and this SW-C is mapped on a Partition with
the PartitionCanBeRestarted parameter set to TRUE. c(SRS_Rte_00018,
SRS_Rte_00196)
When a partition is terminated or is being restarted, it is important that the runnable
entities of this partition are not activated before the partition returns to the ACTIVE
state.
In case of partition restart or termination, event sent to this partition or activation of
tasks of this partition are discarded. The RTE can use these mechanism to ensure that
ExecutableEntitys are not activated.
The finalization routine Rte_Stop of the RTE is called by the ECU state manager at
the beginning of shutdown phase I when the OS is still available. (For details of the
ECU state manager, see [7]. For details of Rte_Start and Rte_Stop see section
5.8.)
[SWS_Rte_02538] d The RTE shall not activate, start or release RunnableEn-
titys on a core after Rte_Stop has been called on this core. c(SRS_Rte_00116,
SRS_Rte_00220)
Note: RTE does not kill the tasks during the running state of the runnables.
[SWS_Rte_02535] d RTE shall ignore incoming client server communication requests,
before RTE is initialized completely and when it is stopped. c(SRS_Rte_00116)
[SWS_Rte_02536] d Incoming data and events from sender receiver communica-
tion shall be ignored, before RTE is initialized completely and when it is stopped. c
(SRS_Rte_00116)
The ECU state manager calls the finalization routine SchM_Deinit of the Basic Soft-
ware Scheduler if the scheduling of Basic Software Modules has to be stopped.
[SWS_Rte_07586] d The BSW Scheduler shall neither activate nor start BswSchedu-
lableEntitys on a core after SchM_Deinit has been called on this core. c
(SRS_Rte_00116)
Note: The BSW Scheduler does not kill the tasks during the running state of the
BswSchedulableEntitys.
For the initialization and finalization of AUTOSAR software components, RTE provides
the mechanism of mode switches. A SwcModeSwitchEvent of an appropriate Mod-
eDeclaration can be used to trigger a corresponding initialization or finalization
runnable (see [SWS_Rte_02562]). Runnables that shall not run during initialization
or finalization can be disabled in the corresponding modes with a mode disabling
dependency (see [SWS_Rte_02503]).
Since category 2 runnables have no predictable execution time and can not be ter-
minated using ModeDisablingDependencies, it is the responsibility of the imple-
menter to set meaningful termination criteria for the cat 2 runnables. These criteria
could include mode information. At latest, all runnables will be terminated by RTE
during the shutdown of RTE, see [SWS_Rte_02538].
It is appropriate to use user defined modes that will be handled in a proprietary ap-
plication mode manager.
All runnables that are triggered by entering an initial mode, are activated immediately
after the initialization of RTE. They can be used for initialization. In many cases it might
be preferable to have a multi step initialization supported by a sequence of different
initialization modes.
In addition to the mode-based approach RunnableEntitys to be used for initializa-
tion purposes can be activated by InitEvents as well. More information is provided
in section 4.2.2.11.
4.7.1 Overview
The AUTOSAR Templates support the creation of Variants in a subset of its model
elements. The Variant Handling support in the in AUTOSAR Templates is driven by
the purpose to describe variability in a AUTOSAR System on several aspects, e.g.
    Virtual Functional Bus
    Component SwcInternalBehavior and SwcImplementation
    Deployment of the software components to ECUs
    Communication Matrix
    Basic Software Modules
This approach requires that the RTE Generator is able to process the described Vari-
ability in input configurations and partially to implement described variability in the gen-
erated RTE and Basic Software Scheduler code.
In the meta-model all locations that may exhibit variability are marked with the stereo-
type atpVariation. This allows the definition of possible variation points.
Tagged Values are used to specify additional information.
There are four types of locations in the meta-model which may exhibit variability:
    Aggregations
    Associations
    Attribute Values
    Classes providing property sets
More details about the AUTOSAR Variant Handling Concept can be found in the AU-
TOSAR Generic Structure Template [10].
[SWS_Rte_06543] d The RTE generator shall support the VariationPoints defined
in the AUTOSAR Meta Model c(SRS_Rte_00201, SRS_Rte_00202, SRS_Rte_00229,
SRS_Rte_00191)
The list of VariationPoints shall provide an overview about the most prominent
ones which impacting the generated RTE code. Further on tables will show which
implementation of variability is standardized due to the relevance for contract phase.
(see tables 4.17, 4.19, 4.20, 4.21, 4.22, 4.23, 4.27, 4.28, 4.30 and 4.31. But please
note that these tables are not listing all possible variation of the input configuration. For
that the related Template Specifications are relevant.
To understand the later definition it is required to clarify the difference between Choos-
ing a Variant and Resolving Variability.
A particular PreBuild Variant in a variant rich input configuration is chosen by assigning
particular values to the SwSystemconsts with the means of PredefinedVariants
and associated SwSystemconstantValueSets. With this information SwSystem-
constDependentFormulas can be evaluated which determines PreBuild conditions
of VariationPoints and attribute values. Nevertheless the input configuration con-
tains still the information of all potential variants.
A particular PostBuild Variant in a variant rich input configuration is chosen by as-
signing particular values to the PostBuildVariantCriterion with the means
of PredefinedVariants and associated PostBuildVariantCriterionValue-
Sets. With this information PostBuildVariantConditions can be evaluated for
instance to check the consistency of chosen PostBuild Variant. Nevertheless the input
configuration contains still the information of all potential variants.
From an RTE perspective this information is mainly used to generate the RTE Post
Build Variant Sets which are used to bind the post-build variability during
initialization of the RTE (call of SchM_Init).
The variability of an input configuration is bound if information related to other variants
is removed and only the information of the bound variant is kept. Binding respectively
resolving variability in the scope of this specification means that the generated code
only implements the particular variant which results out of the chosen variant of the
input configuration.
If the variability can not be resolved in a particular phase of the RTE Generation Pro-
cess (see chapter 3) the generated RTE files have to be able to support the potential
variants by implementing all potential variants.
If the variability is relevant for the software components contract the RTE Generator
uses standardized Condition Value Macros to implement the pre-build variabil-
ity. These Condition Value Macros are set in the RTE PreBuild Data Set Contract
Phase and RTE PreBuild Data Set Generation Phase to the resulting value of the eval-
uated ConditionByFormula of the related VariationPoint.
For further definition see sections 4.7.2.3, 4.7.2.4, 4.7.2.5, 4.7.2.6 and 4.7.2.7.
earliest for this VariationPoint. This controls the capability of the software imple-
mentation to bind the variant earliest at a certain point of time.
Even if the variability is chosen earlier (for instance by assigning SwSystemconst-
Values to the SwSystemconsts used by the VariationPoints condition) the RTE
generator has to respect potential later binding of the VariationPoints.
Please note that variability with the bindingTime PreCompileTime and post-
BuildVariantConditions has a particular semantic for the RTE generation and
impacts the generated output.
For instance a conditional existence RTE API which is bound at PreCompileTime
requires that the RTE generator inserts specific pre processor statements.
 RTE Phase                 System De-      Code Gen-       Pre Compile     Link Time      Post Build
                           signe Time      eration Time    Time
 RTE Contract Phase        R               R               I               n/a            n/a
 Basic        Software     R               R               I               n/a            n/a
 Scheduler     Contract
 Phase
 RTE PreBuild Data         n/a             n/a             RV              n/a            n/a
 Set Contract Phase
 Basic        Software     R               R               I               n/a            I
 Scheduler      Gener-
 ation Phase
 RTE        Generation     R               R               I               n/a            I
 Phase
 RTE PreBuild Data         n/a             n/a             RV              n/a            n/a
 Set Generation Phase
 RTE PostBuild Data        n/a             n/a             n/a             n/a            RV
 Set Generation Phase
A particular variant of the variant rich input configuration is chosen via the ECU con-
figuration For that purpose a set of PredefinedVariants is configured to chosen
a variant in the input configuration and to later on bind the variability in subsequent
phases of the RTE Generation Process 3. For further information see document [10].
4.7.2.3 SystemDesignTime
4.7.2.4 CodeGenerationTime
During RTE Contract Phase, RTE Generation Phase and Basic Software Scheduler
Generation Phase the variability with latest binding time CodeGenerationTime (called
CodeGenerationTime variability) has to be bound and the RTE generator re-
solves the variability. This denotes that the code is generated for a particular variant. To
do this it is required that a particular variant for each CodeGenerationTime vari-
ability has to be chosen.
[SWS_Rte_06507] d The RTE generator shall bind CodeGenerationTime vari-
ability in the RTE Contract Phase, Basic Software Scheduler Contract Phase, RTE
Generation Phase and Basic Software Scheduler Generation Phase (see sections
3.1.1, 3.1.2, 3.4.1 and 3.4.2). c(SRS_Rte_00229, SRS_Rte_00191)
[SWS_Rte_06547] d The RTE Generator shall reject input configurations during
the RTE Contract Phase where not a particular variant is chosen for each Code-
GenerationTime variability affecting the software components contract. c
(SRS_Rte_00191, SRS_Rte_00018)
[SWS_Rte_06548] d The RTE Generator shall reject input configurations during the
Basic Software Scheduler Contract Phase where not a particular variant is chosen for
each CodeGenerationTime variability affecting the Basic Software Scheduler
contract. c(SRS_Rte_00229, SRS_Rte_00018)
[SWS_Rte_06508] d The RTE Generator shall reject input configurations during the
Basic Software Scheduler Generation Phase where not a particular variant is chosen
for each CodeGenerationTime variability affecting the Basic Software Sched-
uler generation. c(SRS_Rte_00229, SRS_Rte_00018)
[SWS_Rte_06509] d The RTE Generator shall reject input configurations during the
RTE Generation Phase where not a particular variant is chosen for each Code-
GenerationTime variability affecting the RTE generation. c(SRS_Rte_00191,
SRS_Rte_00018)
4.7.2.5 PreCompileTime
statements in the generated RTE code (see sections 3.1.1, 3.1.2, 3.4.1 and 3.4.2).
c(SRS_Rte_00191)
[SWS_Rte_06553] d The RTE Generator shall use the defined Attribute Value
Macro instead of immediate values if the value depends on an AttributeVal-
ueVariationPoint where the bindingTime is set to preCompileTime. c
(SRS_Rte_00191)
4.7.2.6 LinkTime
The latest Binding Time LinkTime will not be supported for VariationPoints relevant for
the RTE Generator.
[SWS_Rte_06511] d The RTE generator shall reject configuration which defines RTE
or Basic Software Scheduler relevant LinkTime variability. c(SRS_Rte_00018)
4.7.2.7 PostBuild
This section describes the affects of the existence of variation points with regards to
compositions. Though the application software compositions have been flattened and
effectively eliminated after allocation to an ECU there is still one composition to con-
sider for the RTE (i.e. the RootSwCompositionPrototype). The RootSwCompo-
sitionPrototype contains the atomic software components allocated to the respec-
tive ECU, its assembly connections,its delegation connections and the connections of
the delegation ports to system signals. Once the variability is resolved for a varia-
tion point it must adhere to the constraints and limitations that apply to a model that
does not have any variations. For example dangling connectors are not allowed and
as such their existence will lead to undefined behavior if such configurations still exist
after resolving post-build variation points.
Also within this specification section the wording "a variant is enabled or disabled"
refers to the variation points SwSystemconstDependentFormula and/or PostBuildVari-
antCondition evaluating to "true or false" respectively.
behave as an unconnected port (see section 5.2.7 for the defined RTE behavior) if
no other variant enables a SwConnector between these ports. c(SRS_Rte_00206,
SRS_Rte_00207)
This section describes the impact on the RTE interaction with the COM layer as a
result of variability of DataMappings (i.e. SenderReceiverToSignalMapping and
SenderReceiverToSignalGroupMapping in the SystemMapping) as well as the
existence of variants for ISignals The Meta Model allows for mapping the same data
to different SystemSignals as well as associating a SystemSignal with 1 or more
ISignals.
[SWS_Rte_06603] d If a variant is enabled for a SystemMapping aggregating a
DataMapping then the RTE shall call the appropriate APIs for the applicable map-
ping type. c(SRS_Rte_00206, SRS_Rte_00207)
[SWS_Rte_06604] d The appropriate API shall be determined based on the existence
of variants of ISignals to which a SystemSignal is associated to. For each enabled
ISignal the RTE shall call the proper COM API to send and receive data System-
Signals c(SRS_Rte_00206, SRS_Rte_00207)
For example for an instance mapping from a VariableDataPrototype to a Sys-
temSignal the RTE shall call the corresponding Com_SendSignal with the proper
SignalId and SignalDataPtr based on the selected variant DataMapping.
The existence of variants of ISignals is determined by the System element (see also
[constr_3028]).
[SWS_Rte_06605] d Delegation ports on a RootSwCompositionPrototype for
which no DataMapping exists (i.e. no variant DataMapping is enabled) shall be
considered unconnected because no path exists to a designated SystemSignal.
Since this is a delegation port all enabled delegation connectors linking SWC R-
ports to the respective delegation port must be considered unconnected (see section
5.2.7). P-Ports shall behave as documented in section 4.7.3.1.2. c(SRS_Rte_00206,
SRS_Rte_00207)
any associated SwConnector should also have a variation point removing the connec-
tion since the connection is illegal.
 column                 description
 kind infix             The column kind infix defines infix strings to differentiate condition value
                        macros belonging to variation points of different API sets
 form                   The column form specifies which names for the macro of the condition
                        value are concatenated to ensure a unique name space of the macro.
 form                   description
 component port         The related API is provide for the whole software component and belongs
                        to a software components port
 entity port            The related API is provide for a particular RunnableEntity and belongs
                        to a software components port
 component internal          The related API is provide for the whole software component and belongs
                             to a software component internal functionality
 entity internal             The related API is provide per RunnableEntity and belongs to a soft-
                             ware component internal functionality
[SWS_Rte_06517] d The RTE generator shall treat RTE API as variant RTE API only
if all elements (e.g. VariableAccess) in the input configuration controlling the exis-
tence of the same RTE API are subject to variability. c(SRS_Rte_00203)
Following variation points in the Meta Model do control the variant properties of RTE
API or allocated Memory.
 Variation Point                                                     Subject to variability
 Condition Value Macro
 PortAPIOption with attribute portArgValue                           PortDefinedArgument-
                                                                     Value is passed to           a
                                                                     RunnableEntity
 not standardized
 PortAPIOption with attribute indirectAPI                            Number of Ports which are
                                                                     supporting indirect API, see
                                                                     Rte_NPorts and Rte_Ports
 not standardized
Following variation points in the Meta Model do control the variant existence and acti-
vation of RunnableEntitys.
 Variation Point                                                     Subject to variability
 Condition Value Macro
 RunnableEntity                                                      Existence of the RunnableEn-
                                                                     tity prototype
 [SWS_Rte_06530]
 RTEEvent                                                            Activation of the RunnableEn-
                                                                     tity
 not standardized
Following variation points in the Meta Model do control the variant existence of RTE
memory allocation for the software component instance.
 Variation Point                                            Subject to variability
 Condition Value Macro
 implicitInterRunnableVariable                              variable definition implementing
                                                            the implicitInterRunnabl-
                                                            eVariable
 not standardized
 explicitInterRunnableVariable                              variable definition implementing
                                                            the explicitInterRunnabl-
                                                            eVariable
 not standardized
 arTypedPerInstanceMemory                                   variable definition implementing
                                                            the arTypedPerInstance-
                                                            Memory
 not standardized
 PerInstanceMemory                                          variable definition implementing
                                                            the PerInstanceMemory
 not standardized
 perInstanceParameter                                       constant definition implementing
                                                            the perInstanceParameter
 not standardized
 sharedParameter                                            variable definition implementing
                                                            the sharedParameter
 not standardized
 InstantiationDataDefProps, SwDataDefProps                  Allocation of the memory
                                                            objects described via swAd-
                                                            drMethod, accessibility for
                                                            MCD systems described via
                                                            swCalibrationAccess,
                                                            displayFormat,      mcFunc-
                                                            tion
 not standardized
Following variation points in the Meta Model do control the variant generation of data
types.
 Variation Point                                           Subject to variability
 Condition Value Macro
 ImplementationDataTypeElement                             Existence of the structure or
                                                           union element
 [SWS_Rte_06542]
4.7.3.6 Constants
It is possible to instruct the RTE Generator to provide various instances for a Pa-
rameterDataPrototype in the component description. Therefore one FlatIn-
stanceDescriptor per expected parameter instance has to point to the Param-
eterDataPrototype. Thereby the FlatInstanceDescriptors needs to define
post build variation points to resolve the access to the various parameter instances.
Further details are described in section 4.2.8.3.7.
The VariationPoints listed in table 4.28 in the input configuration are controlling
the variant existence of Basic Software Scheduler API.
 Variation Point                              Subject to variability             form             kind infix
 Condition Value Macro
 ExclusiveArea                                SchM_Enter, SchM_Exit              module           ExAr
                                                                                 internal
 [SWS_Rte_06535]
 managedModeGroup      association   to          SchM_Switch,                    module        MMod
 providedModeGroup       ModeDeclara-            SchM_SwitchAck                  external
 tionGroupPrototype
 [SWS_Rte_06536]
 accessedModeGroup association to pro-           SchM_Mode                       module        AMod
 videdModeGroup or requiredModeGroup                                             external
 ModeDeclarationGroupPrototype
 [SWS_Rte_06536]
 issuedTrigger association to re-                SchM_Trigger                    module        Tr
 leasedTrigger Trigger                                                           external
 [SWS_Rte_06536]
 BswModuleCallPoint                              SchM_Call                       module        SrvCall
                                                                                 external
 [SWS_Rte_06536]
 BswAsynchronousServerCallResult-                SchM_Result                     module        SrvRes
 Point                                                                           external
 [SWS_Rte_06536]
 dataSendPoint association to provided-          SchM_Send                       module        DSP
 Data                                                                            external
 [SWS_Rte_06536]
 dataReceivePoint association to re-             SchM_Receive                    module        DRP
 quiredData                                                                      external
 [SWS_Rte_06536]
 BswInternalTriggeringPoint                      SchM_ActMainFunction            entity        ITr
                                                                                 internal
 [SWS_Rte_06536]
 perInstanceParameter           Parameter-       SchM_CData                      module        PIP
 DataPrototype                                                                   internal
 [SWS_Rte_06535]
 column                      description
 kind infix                  The column kind infix defines infix strings to differentiate condition value
                             macros belonging to variation points of different API sets
 form                        The column form specifies which names for the macro of the condition
                             value are concatenated to ensure a unique name space of the macro.
 form                        description
 module external             The related API is provide for the whole module and belongs to a module
                             interface
 module internal             The related API is provide for the whole module and belongs to a module
                             internal functionality
 entity internal             The related API is provide per ExecutableEntity and belongs to a mod-
                             ule internal functionality
[SWS_Rte_06537] d The RTE generator shall treat the existence of Basic Software
Scheduler API as subject to variability only if all elements (e.g. managedModeGroup
association) in the input configuration controlling the existence of the same Basic Soft-
ware Scheduler API are subject to variability. c(SRS_Rte_00229)
The VariationPoints listed in table 4.30 in the input configuration are controlling the
variant existence of BswModuleEntitys and the variant activation of BswSchedula-
bleEntitys.
 Variation Point                                               Subject to variability
 Condition Value Macro
 BswSchedulableEntity                                          Existence of the BswSchedu-
                                                               lableEntity prototype
 [SWS_Rte_06532]
 BswEvent                                                      Activation of the BswSchedu-
                                                               lableEntity
 not standardized
The VariationPoints listed in table 4.31 in the input configuration are controlling
the variant behavior of Basic Software Scheduler API.
 Variation Point                                               Subject to variability
 Condition Value Macro
 BswModeSenderPolicy                                           Queue length in the mode ma-
                                                               chine instance dependent
                                                               from the attribute
 not standardized
 BswModeReceiverPolicy                                         attribute     supportsAsyn-
                                                               chronousModeSwitch has to
                                                               be considered according the
                                                               bound variant
 not standardized
In this section some examples will be given in order to describe the affects of variability
with regard to SWC implementation. The implemented variability in SWCs is described
through VariationPointProxys and can be resolved by pre-build evaluation, by
post-build evaluation or by the combination of them. Furthermore for each Varia-
tionPointProxy AUTOSAR defines the categorys VALUE and CONDITION (see
Software Component Template [2]). In the following code examples one scenario for
each category will be described. The first scenario addresses the post-build case
and the second one the case of combination of pre-build and post-build.
Scenario for category VALUE
VariationPointProxy FRIDA
postBuildValueAccess Rte_PBCon_FRIDA = 3
might result for example in something like:
   1   /* Generated RTE-Code */
   2
   3   const Rte_PBCon_FRIDA 3
   1   /* SWC-Code */
   2
   3   if (Rte_PBCon_FRIDA == 3) {
   4        /* code depending on proxy FRIDA */
   5        }
   6   else {
   7        /* functional alternative, if FRIDA is not selected */
   8        }
   1   /*SWC-Code*/
   2
   3   /* ensure that no code for HUGO remains in
   4      the binary, if HUGO is not selected */
   5   #if Rte_SysCon_HUGO
   6
   7   /* check during run time, if HUGO is
   8      active due to post-build conditions */
   9   if (Rte_PBCon_HUGO) {
  10        /* code depending on proxy HUGO */
  11        }
  12   else {
  13        /* functional alternative, if HUGO is not selected */
  14        }
  15
16 #else
Since the post-build data structure is not standardized the algorithm for the evaluation
of the expressions RteInternal_EvalPostBuildVariantCondition_HUGO_A
and RteInternal_EvalPostBuildVariantCondition_HUGO_B is up to the im-
plementer.
In contrast to Rte_SysCon the Rte_PBCon API has no guarantee, that it can be re-
solved in the pre-processor. It is subject to the optimization of the compiler to reduce
code size. If one wants to be absolutely sure, that no superfluous code exists even with
non optimizing compilers, he needs to implement a pre-processor directive in addition
(see example).
[SWS_Rte_07676] d Default errors shall be reported to the DET if and only if RteDe-
vErrorDetect is enabled. c(SRS_BSW_00337)
[SWS_Rte_06631] d The RTE shall use the OS Application Identifier as the Instance Id
to enable the developer to identify in which runtime section of the RTE the error occurs.
This Instance ID is even unique across multi cores and so implicitly allows the default
error to be traced to a specific core. c(SRS_BSW_00337)
[SWS_Rte_06632] d The RTE shall use the Service Id as identified in the table 4.33.
Each RTE API template, RTE callback template and RTE API will have an Identifier.
This ID Service ID must be used when running code in the context of the respective
RTE call. c(SRS_BSW_00337)
Only a limited set of development identifiers are currently recognized. Each of these
need to be detected either at runtime or during initialization of the RTE. To report these
errors extra development code must be generated by the RTE generator.
[SWS_Rte_06633] d An RTE_E_DET_ILLEGAL_SIGNAL_ID (0x01) shall be reported
at runtime by the RTE when it receives a COM callback for a signal name (e.g.
Rte_COMCbk_<sn>, Rte_COMCbkTAck_<sn>) which was not expected within the
context of the currently-selected postBuild variant. See section 5.9.2.1 for the list of
possible COM callback template API. c(SRS_BSW_00337)
[SWS_Rte_06634] d An RTE_E_DET_ILLEGAL_VARIANT_CRITERION_VALUE
(0x02) shall be reported by the RTE when it determines that a value is assigned to
a variant criterion which is not in the list of possible values for that criterion. This error
shall be detected during the RTE initialization phase. c(SRS_BSW_00337)
[SWS_Rte_07684] d An RTE_E_DET_ILLEGAL_VARIANT_CRITERION_VALUE
(0x02) shall be reported by the Basic Software Scheduler when the SchM_Init API
is called with a NULL parameter. c(SRS_BSW_00337)
[SWS_Rte_06635] d An RTE_E_DET_ILLEGAL_INVOCATION (0x03) shall be re-
ported by the RTE when it determines that an RTE API is called by a Runnable which
should not call that RTE API. The RTE can identify the active Runnable when it dis-
patches the RTE Event and if it subsequently receives a call from that Runnable to
an API that is not part of its contract then this particular error ID must me logged. c
(SRS_BSW_00337)
[SWS_Rte_06637] d An RTE_E_DET_WAIT_IN_EXCLUSIVE_AREA (0x04) shall be
reported by the RTE when an application has called an Rte_Enter API and subse-
quently asks the RTE to enter a wait state. This is illegal because it would lock the
ECU. c(SRS_BSW_00337)
[SWS_Rte_07675] d An RTE_E_DET_ILLEGAL_NESTED_EXCLUSIVE_AREA
(0x05) shall be reported by the RTE when an application violates
[SWS_Rte_CONSTR_09029]. c(SRS_BSW_00337)
[SWS_Rte_07685] d An RTE_E_DET_SEG_FAULT (0x06) shall be reported by the
RTE when the parameters of an RTE API call contain a direct or indirect reference to
memory that is not accessible from the callers partition as defined in [SWS_Rte_02752]
and [SWS_Rte_02753]. c(SRS_BSW_00337)
[SWS_Rte_07682] d If RteDevErrorDetectUninit is enabled,                    an
RTE_E_DET_UNINIT (0x07) shall be reported by the RTE when one of the APIs :
    Specified in 5.6.
    Rte_NvMNotifyInitBlock.
    Rte_PartitionTerminated.
    Rte_PartitionRestarting.
    Rte_RestartPartition.
is called before Rte_Start, after Rte_Stop or After the partition to witch the API
belongs is terminated. c(SRS_BSW_00337)
Note:
    In production mode, No checks are performed.
The following abbreviations are used to identify the DET error in table 4.33.
              Abbreviation   RTE DET Error
                      ISI    RTE_E_DET_ILLEGAL_SIGNAL_ID
                     IVCV    RTE_E_DET_ILLEGAL_VARIANT_CRITERION_VALUE
                        II   RTE_E_DET_ILLEGAL_INVOCATION
                     INEA    RTE_E_DET_ILLEGAL_NESTED_EXCLUSIVE_AREA
                     WIEA    RTE_E_DET_WAIT_IN_EXCLUSIVE_AREA
                  UNINIT     RTE_E_DET_UNINIT
The following table 4.33 indicates which DET errors are relevant for the various RTE
APIs, and the service ID associated with the RTE APIs (see [SWS_Rte_06632]):                       UNINIT
                                                                         IVCV
                                                                                     INEA
                                                                                            WIEA
                                                                   ISI
II
The component wrapper method consists in wrapping the original software component
implementation with a CDD that implements the bypass. With this method the CDD is
able to take the control of the AUTOSAR interfaces of the software component because
there is no more direct call between RTE and the SWC but everything go through the
CDD.
RTE RTE
SWC B
RPT CDD
The RTE supports the component wrapper method by generating the SWC interfaces
with a c-namespace including an additional [Byps_] infix for the bypassed SWC (i.e.
SWC B in Figure 4.56). This includes:
    naming of Application Header File
    naming of the Application Type Header File
    naming of the RTE APIs (excepted life cycle APIs)
    naming of the runnables
    naming of the instance handle
    naming of the Component Data Structure type
    naming of the memory sections
The component wrapper method for bypass support is enabled per software compo-
nent type.
[SWS_Rte_07840] d The component wrapper method for bypass support is enabled
for a software component type if the general switch RteBypassSupport is set to COM-
PONENT_WRAPPER and the individual switch for this software component type RteBy-
passSupportEnabled is set to true. c(SRS_Rte_00244)
The direct buffer access method provides runtime direct read and write access to the
RTE buffers that implement the ECU communication infrastructure.
The RTE supports the direct buffer access method by generating the McSupportData
for these buffers. This is already supported by the RTE measurement and calibration
support but for the rapid prototyping purpose additional elements shall be generated.
The component wrapper method for bypass support is enabled per software compo-
nent type.
The component wrapper method for bypass support is enabled for a software compo-
nent type if the individual switch for this software component type RteBypassSup-
portEnabled is set to true.
[SWS_Rte_07836] d If the direct buffer access method for bypass support is en-
abled for a software component type, the RTE generator shall generate McSup-
portData with mcDataAccessDetails for each preemption area specific buffer
that implements the implicit communication for this software component type. c
(SRS_Rte_00244)
The extended buffer access method enhances the support for rapid prototyping (RP) to
support the bypass use case where the RTE cannot be regenerated by the bypass user.
The goal is to ensure that all VariableDataPrototypes that are communicated
via RTE APIs are written to and read back from a RP global buffer that can be
modified by rapid prototyping tools (RPT). The method applies to all RTE APIs and not
just those for implicit access and hence is termed the extended buffer access method.
RTE RTE
set to true for Extended Buffer Access bypass support to be generated for a software
component.
The configuration options are summarized in Table 4.35.
  RteBypassSupport       RteBypass-        RteServicePoint-    Effect
  (global)               SupportEnabled    SupportEnabled
                         (per-SWC)         (per-SWC)
  NONE or COMPONENT_-    Any               Any                 No bypass support gener-
  WRAPPER                                                      ated by RTE. No RP ex-
                                                               port generated by RTE
  EXTENDED_BUFFER_-      FALSE             FALSE               No bypass support for
  ACCESS                                                       SWC type generated by
                                                               RTE in code (i.e. No ser-
                                                               vice points and no use
                                                               of RP memory interface).
                                                               RP export describes ser-
                                                               vice points for SWC Inter-
                                                               nal service points only.
  EXTENDED_BUFFER_-      FALSE             TRUE                Service points generated
  ACCESS                                                       for SWC. No use of RP
                                                               memory interface.       RP
                                                               export describes resulting
                                                               SWC Internal and RTE
                                                               assigned service points.
  EXTENDED_BUFFER_-      TRUE              FALSE               Service points not gener-
  ACCESS                                                       ated for SWC. RP mem-
                                                               ory interface generated
                                                               for RTE APIs. RP export
                                                               describes SWC Internal
                                                               service points and also
                                                               the resulting RP buffers
                                                               and enabler flags.
  EXTENDED_BUFFER_-      TRUE              TRUE                Service points generated
  ACCESS                                                       for SWC. RP memory in-
                                                               terface generated for RTE
                                                               APIs.     RP export de-
                                                               scribes resulting SWC In-
                                                               ternal and RTE assigned
                                                               service points, RP buffers
                                                               and enabler flags.
Table 4.35: Summary of enable/disable options for Extended Buffer Access method
This level is intended to be used by post-build hooking tools that patch writes to buffers
such that a bypass value is written into a buffer rather than the value calculated by the
ECU.
Logically this means that a C statement like:
   1   buffer = ecu_value;
is patched to be:
   1   buffer = f(ecu_value);
As an example of the changes to generated RTE code when rptLevel1 of the Ex-
tended Buffer Access method is enabled, consider an Rte_Write API that sends
VariableDataPrototype D via port P using explicit semantics. A typical imple-
mentation might look something like Example 4.12:
Example 4.12
   1   Std_ReturnType Rte_Write_P_D(<type> data)
   2   {
   3     <send> data;
   4     return <result of send>;
   5   }
Example 4.13
   1   /* RP global buffer */
   2   volatile <type> SWCA_Bypass_P_D;
   3
   4   Std_ReturnType Rte_Write_P_D(<type> data)
   5   {
   6     SWCA_Bypass_P_D = data;
   7     <send> SWCA_Bypass_P_D;
   8     return <result of send>;
   9   }
The changes as a result of rptLevel1 support revolve around the reads/writes of the
RP global buffer. These changes are summarized by the following two require-
ments:
[SWS_Rte_06033] d When rptLevel1 support is enabled for a VariableDataPro-
totype accessed using explicit semantics the RTE generator shall write each associ-
ated IN or INOUT API parameter to a RP global buffer. c(SRS_Rte_00244)
Subsequent accesses to the actual parameter within the generated function are re-
placed by use of the RP global buffer instead.
[SWS_Rte_06034] d When rptLevel1 support is enabled for a VariableDataPro-
totype accessed using explicit semantics then within RTE APIs the RTE generator
shall read the value of the associated IN and INOUT parameters from the RP global
buffer rather than use the formal parameter. c(SRS_Rte_00244)
These modifications ensure that if an RP tool patches the write to the RP global
buffer SWCA_Bypass_P_D then the value that is written by the RP tool to
SWCA_Bypass_P_D will be sent instead of the actual function parameter data.
The requirements inherently cause the RP global buffer to exist thus there is no
explicit requirement to create the global buffer. However the characteristics of this
buffer are constrained as follows.
[SWS_Rte_06035] d An RP global buffer used for rptLevel1 data shall be
marked as volatile. c(SRS_Rte_00244)
The volatile keyword is essential to ensure that compiler optimization does not elide
the read of SWCA_Bypass_P_D in <send> SWCA_Bypass_P_D.
[SWS_Rte_06036] d The RP global buffer contents shall be valid for at least the
lifetime of the accessing RTE function (i.e. the lifetime of the runnable that calls the RTE
function) and any related measurement and stimulation services. c(SRS_Rte_00244)
[SWS_Rte_06037] d The same RP global buffer shall always be used for the
same SWCI/API-type/port/variable-data-prototype. c(SRS_Rte_00244)
Requirement [SWS_Rte_06037] ensures stability for post-build hooking tools, e.g. if
we have Rte_Write_P_D for SWCA then the same RP global buffer is used irre-
spective of when or how SWCA calls Rte_Write_P_D. Since the RTE API is created
per-SWC instance then different instances will use different RP global buffers.
Note that requirement [SWS_Rte_06036] indicates the minimum lifetime required; in
an implementation the actual lifetime may be longer.
The above requirements are not intended to indicate that a dedicated RP global
buffer must be created. In particular, if the generated RTE already contains a buffer
whose characteristics satisfy those of an RP global buffer then an implementation
is free to reuse the existing buffer.
As an additional example, consider an Rte_Read API that receives VariableDat-
aPrototype D via port P. A typical implementation might look something like Exam-
ple 4.14:
Example 4.14
   1   Std_ReturnType Rte_Read_P_D(<type>* const data)
   2   {
   3     *data = <receive>;
   4     <notifications>;
   5     return <result of receive>;
   6   }
When using the Extended buffer access method and the rptPreparationLevel is
rptLevel1, the RptContainer references D and rptReadAccess is rptReadAc-
cess the generated RTE API from Example 4.14 is modified to become Example 4.15:
Example 4.15
   1   volatile <type> SWCB_Bypass_P_D; /* RP global buffer */
   2   Std_ReturnType Rte_Read_P_D(<type>* const data)
   3   {
   4     SWCB_Bypass_P_D = <receive>;
   5     *data = SWCB_Bypass_P_D;
   6     <notifications>;
   7     return <result of receive>;
   8   }
Example 4.16
   1   /* RP global buffer */
For implicit Sender-Receiver and IRV communication, RP global buffers are used
when the context-local implicit communication buffers are initialized and written back.
Consider an Rte_IWrite API that sends VariableDataPrototype D via port P and
an Rte_IRead API that reads VariableDataPrototype E via port Q. A typical
implementation might look like:
   1   local_P_D = global_P_D;
   2   local_Q_E = global_Q_E;
   3   Runnable();
   4   global_P_D = local_P_D;
To enable the RP tool to intercept the update of the context-local buffer used by the
implicit APIs the Extended Buffer Access method uses an RP global buffer in a
similar fashion to the explicit APIs.
[SWS_Rte_06040] d When rptLevel1 support is enabled for a VariableDataPro-
totype accessed by implicit semantics the RTE generator shall first update the RP
global buffer from the RTE global variable / COM signal and then update the pre-
emption area specific buffer from the RP global buffer before runnable invocation
c(SRS_Rte_00244)
[SWS_Rte_06087] d When rptLevel1 support is enabled for a VariableDataPro-
totype accessed by implicit semantics the RTE generator shall, after runnable termi-
nation, perform any write-back by first writing the preemption area specific buffer to the
RP global buffer and then updating the RTE global variable / COM signal from
the RP global buffer. c(SRS_Rte_00244)
The Runnable() sequence can comprise of one or more calls to different runnables.
Each runnable has a unique implicit API and therefore can, potentially, access different
context-local buffers.
Finally, the write to the preemption area specific buffer and subsequent use could be
used as the write-read cycle required for post-build hooking. A distinct RP global
buffer may therefore be optimized away in some circumstances and the preemption
area specific buffer used to enforce the requirement memory access pattern.
[SWS_Rte_06091] d When rptLevel1 support is enabled the RTE generator should
avoid dedicated RP global buffer variables for implicit communication by im-
plementing the preemption area specific buffers according to the (implementation)
requirements on a RP global buffer ([SWS_Rte_06035],[SWS_Rte_06036]). c
(SRS_Rte_00244)
For instance in this case the preemption area specific buffers needs to be declared as
volatile.
Mode APIs are handled in a similar manner to explicit Sender-receiver APIs with the
actual function parameters being written to an associated RP global buffer before
use.
[SWS_Rte_06107] d When rptLevel1 support is enabled for a ModeDeclara-
tionGroupPrototype the RTE generator shall write the API parameter to a RP
global buffer. c(SRS_Rte_00244)
Subsequent accesses to the actual parameter within the generated function are re-
placed by use of the RP global buffer instead.
[SWS_Rte_06108] d When rptLevel1 support is enabled for a ModeDeclara-
tionGroupPrototype then within RTE APIs the RTE generator shall read the value
of the associated parameter from the RP global buffer rather than use the formal
parameter. c(SRS_Rte_00244)
These modifications ensure that if an RP tool patches the write to the RP global
buffer then the value that is written by the RP tool will be used as the new mode
instead of the actual function parameter.
As an additional example, consider the typical implementation for an Rte_Switch API
shown in Example 4.17 (error handling omitted for clarity):
Example 4.17
   1   Std_ReturnType Rte_Switch_P_M( <type> newMode )
   2   {
   3     if ( ! <in_transition> )
   4     {
   5        mode = newMode;
   6        <notifications>
   7     }
   8     else
   9     {
  10        <enQueue>( newMode );
  11     }
  12     return E_OK;
  13   }
When using the Extended buffer access method and the rptPreparationLevel is
rptLevel1 the generated RTE API from Example 4.17 is modified to become Exam-
ple 4.18:
Example 4.18
   1   /* RP global buffer */
   2   volatile <type> SWCA_Bypass_P_M;
   3
   4   Std_ReturnType Rte_Switch_P_M( <type> newMode )
   5   {
   6     SWCA_Bypass_P_M = newMode;
   7
   8       if ( ! <in_transition> )
   9       {
  10          mode = SWCA_Bypass_P_M;
  11          <notifications>
  12       }
  13       else
  14       {
  15          <enQueue>( SWCA_Bypass_P_M );
  16       }
  17       return E_OK;
  18   }
4.9.4.3.5.1 IN Parameters
Example 4.19
   1   Std_ReturnType Rte_Call_P_OP([IN] <type> a)
   2   {
   3     Server( a );
   4     return E_OK;
   5   }
Example 4.20
   1   /* RP global buffer */
   2   volatile <type> SWCA_Bypass_P_OP_a;
   3
   4   Std_ReturnType Rte_Call_P_OP([IN] <type> a)
   5   {
Example 4.21
   1   Std_ReturnType Rte_Call_P_OP([OUT] <type> a)
   2   {
   3     Server( a );
   4     return E_OK;
   5   }
Example 4.22
   1   /* RP global buffer */
   2   volatile <type> SWCA_Bypass_P_OP_a;
   3
   4   Std_ReturnType Rte_Call_P_OP([OUT] <type> a)
   5   {
   6     /* Pass reference to RP global buffer to server */
   7     Server( &SWCA_Bypass_P_OP_a );
   8
   9       /* Copy server value (possible modified by RPT) to client */
  10       <deep-copy>( a, &SWCA_Bypass_P_OP_a );
  11       return E_OK;
  12   }
Example 4.23
   1   Std_ReturnType Rte_Call_P_OP([IN-OUT] <type> a)
   2   {
   3     Server( a );
   4     return E_OK;
   5   }
Example 4.24
   1   /* RP global buffer */
   2   volatile <type> SWCA_Bypass_P_OP_a;
   3
   4   Std_ReturnType Rte_Call_P_OP([IN-OUT] <type> a)
   5   {
   6     /* Copy in value (possible modified by RPT) to RP global buffer */
   7     <deep-copy>( &SWCA_Bypass_P_OP_a, a );
   8
   9       /* Pass reference to RP global buffer to server */
  10       Server( &SWCA_Bypass_P_OP_a );
  11
This level is used for bypass scenarios where the binary code remains unchanged after
RTE generation  in particular any code level requirements for bypass are inserted
when the RTE is generated. For example, RP global buffers may be inserted as
for rptLevel1 however run-time RP enabler flags are also added to allow control
of how the buffers are used.
The typical Rte_Write Example 4.12 becomes Example 4.25:
Example 4.25
   1   /* RP global buffer */
   2   volatile <type> SWCA_Bypass_P_D;
   3
   4   /* RP enabler flag */
   5   volatile <flag> SWCA_Bypass_P_D_Enable = FALSE;
   6
   7   Std_ReturnType Rte_Write_P_D(<type> data)
   8   {
   9     if ( FALSE == SWCA_Bypass_P_D_Enable )
  10     {
  11         SWCA_Bypass_P_D = data;
  12     }
  13     <send> SWCA_Bypass_P_D;
  14     <notifications>;
  15     return <result of send>;
  16   }
Example 4.26
   1   /* RP global buffer */
   2   volatile <type> SWCB_Bypass_P_D;
   3
   4   /* RP enabler flag */
   5   volatile <flag> SWCB_Bypass_P_D_Enable = FALSE;
   6
   7   Std_ReturnType Rte_Read_P_D(<type>* const data)
   8   {
   9     <type> temp = <receive>;
  10     if ( FALSE == SWCB_Bypass_P_D_Enable )
  11     {
  12         SWCB_Bypass_P_D = temp;
  13     }
  14     *data = SWCB_Bypass_P_D;
  15     <notifications>;
  16     return <result of receive>;
  17   }
mantics and the RP enabler flag is disabled the RTE generator shall write the
value destined for each OUT or INOUT API parameter to an associated RP global
buffer after the value is received within the generated function. c(SRS_Rte_00244)
[SWS_Rte_06044] d When rptLevel2 support is enabled for a VariableDataPro-
totype accessed using explicit semantics then within RTE APIs the RTE generator
shall read the value of the associated OUT and INOUT parameters from the RP global
buffers rather than directly using the values received in the generated function. c
(SRS_Rte_00244)
rptLevel2 support can be enabled for individual parameters within an operation.
The generated RP enabler flags control the copies of the parameter before and/or
after the server invocation within the generated RTE API.
For IN and IN-OUT parameters the generated code conditionally overwrites the value
in the associated RP global buffer before server invocation. The overwrite oc-
curs when the RP enabler flag is disabled and hence bypass  use of the RP
generated value  is enabled.
[SWS_Rte_06098] d When rptLevel2 support is enabled for a ArgumentDataPro-
totype with direction IN or IN-OUT and the RP enabler flag is disabled the
RTE generator shall write the actual parameter value destined for each IN or IN-OUT
API parameter to an associated RP global buffer after the value is received within
the generated function. c(SRS_Rte_00244)
To enable replacement of the server generated value with one generated by the RPT
a selection can be made based on the RP enabler flag.
[SWS_Rte_06099] d When rptLevel2 support is enabled for a ArgumentDataPro-
totype with direction IN-OUT or OUT and the RP enabler flag is disabled the
RTE generator shall copy the server-generated value to the RP global buffer be-
fore copying the RP global buffer to the clients IN-OUT or OUT parameter . c
(SRS_Rte_00244)
[SWS_Rte_06100] d When rptLevel2 support is enabled for a ArgumentDataPro-
totype with direction IN-OUT or OUT and the RP enabler flag is enabled
the RTE generator shall copy the RP global buffer to the clients IN-OUT or OUT
parameter after the server invocation is complete. Note that in this case the server-
generated value is ignored. c(SRS_Rte_00244)
Requirements [SWS_Rte_06099] and [SWS_Rte_06100] require that the output
comes from two different places; the server generated value when bypass is disabled
and the RPT generate value when enabled. This implies the use of a temporary data
store passed to the server to avoid overwriting the RPT value held in the RP global
buffer.
[SWS_Rte_06101] d When rptLevel2 support is enabled for a ArgumentDataPro-
totype with direction IN-OUT the generated code shall use separate RP en-
abler flags for input-side and output-side bypass. c(SRS_Rte_00244)
Example 4.27
   1   /* Input-side bypass */
   2   volatile <type> SWCA_BypassIN_P_OP_a;
   3   volatile <flag> SWCA_BypassIN_P_OP_Enable = FALSE;
   4
   5   /* Output-side bypass */
   6   volatile <type> SWCA_BypassOUT_P_OP_a;
   7   volatile <flag> SWCA_BypassOUT_P_OP_Enable = FALSE;
   8
   9   Std_ReturnType Rte_Call_P_OP([IN-OUT] <type> a)
  10   {
  11     if ( FALSE == SWCA_BypassIN_P_OP_Enable )
  12     {
  13       /* RP disabled... use IN value */
  14       <deep-copy>( &SWCA_BypassIN_P_OP_a, a );
  15     }
  16
The RP enabler flags control how the generated APIs interact with the RP
global buffers (e.g. as updated by a post build hooking tool) depending on the
flag state:
Example 4.28
   1   /* RP enabler flag (in RAM) */
   2   volatile <flag> SWCA_Bypass_P_D_Enable = FALSE;
   3
   4   /* RP enabler flag (as a characteristic) */
   5   volatile const <flag> SWCA_Bypass_P_D_Enable_Char = FALSE;
   6
   7   if ( ( FALSE == SWCA_Bypass_P_D_Enable ) &&
   8        ( FALSE == SWCA_Bypass_P_D_Enable_Char ) )
   9   {
  10      SWCA_Bypass_P_D = data;
  11   }
In the above examples <flag> represents the RP enabler flag data type. Imple-
mentations are at liberty to provide optimized implementations of the enablers, e.g.
packing multiple enabler flags into a single variable, depending on known hardware
characteristics.
rptLevel3 is an extension of rptLevel2 but also records the value the ECU calcu-
lated. For example:
Example 4.29
   1   /* RP global buffer */
   2   volatile <type> SWCA_Bypass_P_D;
   3
   4   /* RP global measurement buffer */
   5   volatile <type> SWCA_Bypass_P_D_Original;
   6
   7   /* RP enabler flag */
   8   volatile <flag> SWCA_Bypass_P_D_Enable = FALSE;
   9
  10   Std_ReturnType Rte_Write_P_D(<type> data)
  11   {
  12     SWCA_Bypass_P_D_Original = data;
  13     if ( FALSE == SWCA_Bypass_P_D_Enable )
  14     {
  15         SWCA_Bypass_P_D = data;
  16     }
  17     <send> SWCA_Bypass_P_D
  18     return <result of send>
  19   }
Example 4.30
   1   /* RP global buffer */
   2   volatile <type> SWCB_Bypass_P_D;
   3
   4   /* RP global measurement buffer */
   5   volatile <type> SWCB_Bypass_P_D_Original;
   6
   7   /* RP enabler flag */
   8   volatile <flag> SWCB_Bypass_P_D_Enable = FALSE;
   9
  10   Std_ReturnType Rte_Read_P_D(<type>* const data)
  11   {
  12     <type> temp = <receive>;
  13     SWCB_Bypass_P_D_Original = temp;
  14     if ( FALSE == SWCB_Bypass_P_D_Enable )
  15     {
  16         SWCB_Bypass_P_D = temp;
  17     }
  18     *data = SWCB_Bypass_P_D;
  19     return <result of receive>;
  20   }
Example 4.31
   1   /* Input-side bypass */
   2   volatile <type> SWCA_BypassIN_P_OP_a;
   3   volatile <type> SWCA_BypassINMeasurementBuf_P_OP_a;
   4   volatile <flag> SWCA_BypassIN_P_OP_Enable = FALSE;
   5
   6   /* Output-side bypass */
   7   volatile <type> SWCA_BypassOUT_P_OP_a;
   8   volatile <type> SWCA_BypassOUTMeasurementBuf_P_OP_a;
   9   volatile <flag> SWCA_BypassOUT_P_OP_Enable = FALSE;
  10
  11   Std_ReturnType Rte_Call_P_OP([IN-OUT] <type> a)
  12   {
  13     /* rptLevel3: Retain input value */
  14     <deep-copy>( &SWCA_BypassINMeasurementBuf_P_OP_a, a );
  15     if ( FALSE == SWCA_BypassIN_P_OP_Enable )
  16     {
  17       /* RP disabled... use IN value */
  18       <deep-copy>( &SWCA_BypassIN_P_OP_a, a );
  19     }
  20     else
  21     {
  22       /* RP enabled... do nothing & use value from RPT */
  23     }
  24
  25     /* Pass reference to RP global buffer to server */
  26       Server( &SWCA_BypassIN_P_OP_a );
  27
  28       /* rptLevel3: Retain server generated value */
  29       <deep-copy>( &SWCA_BypassOUTMeasurementBuf_P_OP_a, &
              SWCA_BypassIN_P_OP_a );
  30
  31       if ( FALSE == SWCA_BypassOUT_P_OP_Enable )
  32       {
  33         /* Output-side bypass disabled: use server value */
  34         <deep-copy>( a, &SWCA_BypassIN_P_OP_a );
  35       }
  36       else
  37       {
  38         /* Copy RPT-initialized value to client */
  39         <deep-copy>( a, &SWCA_BypassOUT_P_OP_a );
  40       }
  41
  42       return E_OK;
  43   }
For IN and OUT parameters the generated code is similar to Example 4.31 but with
either the input-side or output-side bypass omitted as appropriate.
For implicit communication the context-local buffer is updated from the global master
via an interception if the RP enabler flag is disabled. For rptLevel3 the original
(master) data is also preserved in the RP global measurement buffer. A typi-
cal implementation for the initialization of the context-local buffer within a task (when
rptLevel3 support is enabled) would therefore look like:
Example 4.32
   1   /* RP global buffer */
   2   volatile <type> SWCB_Bypass_P_D;
   3
   4   /* RP global measurement buffer */
   5   volatile <type> SWCB_Bypass_P_D_Original;
   6
   7   /* RP enabler flag */
   8   volatile <flag> SWCB_Bypass_P_D_Enable = FALSE;
   9
  10   TASK(X)
  11   {
  12     /* RP global measurement buffer = global master data */
  13     SWCB_Bypass_P_D_Original = global_P_D;
  14
  15       if ( FALSE == SWCB_Bypass_P_D_Enable )
  16       {
  17          /* RP global buffer = global master data */
  18          SWCB_Bypass_P_D = global_P_D;
  19       }
  20
  21       /* context-local buffer */
  22       local_P_D = SWCB_Bypass_P_D;
  23       ...
  24   }
When the RP enabler flag is disabled the global master data is used to update
SWCB_Bypass_P_D and hence the RP generated value is not used. Conversely when
bypass is enabled the value written by the RPT into SWCB_Bypass_P_D is used rather
than overwriting with the global master.
[SWS_Rte_06051] d When rptLevel3 is enabled for a VariableDataPrototype
accessed by implicit semantics the RTE generator shall update the RP global mea-
surement buffer before the context-local buffer is updated (via the RP global
buffer). c(SRS_Rte_00244)
[SWS_Rte_06052] d When rptLevel2 or rptLevel3 is enabled for a Variable-
DataPrototype accessed by implicit semantics and the RP enabler flag is dis-
abled the RTE generator shall write the value from the global master data to the RP
global buffer. c(SRS_Rte_00244)
[SWS_Rte_06053] d When rptLevel2 or rptLevel3 is enabled for a Variable-
DataPrototype accessed by implicit semantics the RTE generator shall write the
value from the RP global buffer to the context-local buffer after the RP global
buffer is updated. c(SRS_Rte_00244)
[SWS_Rte_06054] d The RTE generator shall perform the above requirements
in the sequence [SWS_Rte_06051] [SWS_Rte_06052] [SWS_Rte_06053].       c
(SRS_Rte_00244)
After runnable termination the value produced must be written back to the global mas-
ter. The write-back occurs via an interception if the RP enabler flag is disabled.
For rptLevel3 the original data produced by the runnable is also preserved in the
RP global measurement buffer. A typical implementation for the initialization
of the context-local buffer within a task (when rptLevel3 support is enabled) would
therefore look like:
Example 4.33
   1   /* RP global buffer */
   2   volatile <type> SWCB_Bypass_P_D;
   3
   4   /* RP global measurement buffer */
   5   volatile <type> SWCB_Bypass_P_D_Original;
   6
   7   /* RP enabler flag */
   8   volatile <flag> SWCB_Bypass_P_D_Enable = FALSE;
   9
  10   TASK(X)
  11   {
  12       ...
  13
  14       /* RP global measurement buffer = context-local buffer */
  15       SWCB_Bypass_P_D_Original = local_P_D;
  16
  17       if ( FALSE == SWCB_Bypass_P_D_Enable )
  18       {
  19         /* RP global buffer = context-local buffer */
  20         SWCB_Bypass_P_D = local_P_D;
  21       }
  22
  23       global_P_D = SWCB_Bypass_P_D;
  24   }
4.9.4.7 Export
The RTE generator must describe the various buffers and flags created to support the
configured RptImplPolicy.rptPreparationLevel for a VariableDataProto-
type so that the information can be accessed by the RP system after RTE genera-
tion12 .
A generated RP buffer, flag, etc. is described by a separate McDataInstance with
a particular role, e.g. RP-GLOBAL-BUFFER, that describe its usage. The role can
describe the following:
   1. RP global buffer.
   2. RP enabler flag(s) (rptLevel2/rptLevel3).
  12
   To be fully used by an RPT system the information exported by the RTE generator may need sub-
sequent augmentation to add details that are not known to the RTE generator, e.g. address information.
Example 4.34
Where:
    The RTE event identifier, <rptEventId>, identifies the RTE event and is
     within the range specified in the interval [minRptEventId. . .maxRptEventId)
     of the RptExecutableEntityProperties.
    The RP service point ids, <spId1> and <spId2>, identify the ser-
     vice point and are within the interval [minServicePointId. . .maxService-
     PointId) of the RptProfile.
    <stim> is the RP stimulation enabler flag to control RP stimulation.
Example 4.35
Each RP service function use the same RTE event identifier, i.e.
<rptEvendId>, since all four calls wrap the same runnable invocation however each
uses a different RP service point id.
Multiple RptProfiles can lead to multiple RP service functions for the same
RTEEvent. All such calls are ordered alphabetically ([SWS_Rte_06061]) and have the
same RTE event identifier but different RP service point ids.
The RP service function is responsible for sampling the required data. The pa-
rameters of the RP service function do not include the data, instead, the param-
eters identify the RTE EVent and service point:
<rptEventId>  RTE event identifier indicating the associated RTE Event.
       This parameter is defined by the RptContainers RptExecutableEnti-
       tyProperties and is therefore the same for all RptProfiles aggregated
       within the RptContainer.
Example 4.36
   1   ServiceFunc1_pre(<rptEventId>, <spId1>, <stimEnabler>);
   2   if (! <rp_disabler_flag>)
   3   {
   4     re1();
   5   }
   6   ServiceFunc1_post(<rptEventId>, <spId2>, <stimEnabler>);
The <stimEnabler> parameter has a fixed datatype of uint8 and is, when config-
ured, exported into RptSupportData as calibratable.
[SWS_Rte_06111] d When RptProfile.stimEnabler is rptEnablerRam or
rptEnablerRom the value of the <stimEnabler> shall be passed as the third pa-
rameter of the RP service function invocation. c(SRS_Rte_00244)
[SWS_Rte_06112] d When RptProfile.stimEnabler is none the third parameter
of the RP service function invocation shall be 0 (zero). c(SRS_Rte_00244)
[SWS_Rte_06115] d The RTE generator shall reject configurations where the Rpt-
Profile.stimEnabler is rptEnablerRamAndRom. c(SRS_Rte_00244)
Each RP service point has its own <stimEnabler> parameter. As a conse-
quence, there are as many <stimEnabler> parameters as there are enabled RP
service points, i.e. 1000 Service points with enabled RptProfile.stimEnabler
will result in 1000 calibratable <stimEnabler> parameters.
As well as instantiating the <stimEnabler> parameter the RTE generate must output
information in the generated RptSupportData to enable down-stream tools to locate
the calibratable parameter.
[SWS_Rte_06110] d When RptProfile.stimEnabler is not none the <sti-
mEnabler> description shall be exported in the RptSupportData. c(SRS_Rte_00244)
The calibratable <stimEnabler> parameters are accessed by MC or RP tools. To
enable the identification of different parameters the name of the generated calibratable
value includes the name of the hooked RTE/BSW Event.
[SWS_Rte_06109] d The name of generated <stimEnabler> parameter shall in-
clude the name of hooked SwComponentPrototype and RTEEvent/BswEvent to
be referenced. c(SRS_Rte_00244)
4.9.5.3 Integration
There are two possibilities on how to integrate a RP service point pre-build; either
as SWC Internal inserted by the SWC developer or as RTE Assigned created by the
RTE generator.
SWC Internal In this scenario the RP service function signature of the BSW that
   provides the service is known by the SWC developer.
      The SWC developer implements the RP service function calls at required
      positions within the RunnableEntity code, typically one right before and a sec-
      ond one right after every area to be prepared for bypassing. This mechanism is
      typically used in migration scenarios where a single RunnableEntity contains
      multiple functionality.
      The SWC developer has to document the integrated RP service point,
      whether used for sampling or stimulating RP data, in the context of the
      RunnableEntity information of the AUTOSAR SWC description.
      In this scenario there is no requirement for the RTE generator to insert RP ser-
      vice point calls within generated code. In addition, the RTE generator is not
      responsible for assignment of RP service point ids instead these are se-
      lected when the RP service functions invocations are created. However
      the RTE generator must ensure that the description of the SWCs service hooks
      is exported for subsequent tools.
RTE Assigned In this scenario the RTE generator evaluates the SWC descriptions
    for required SWC RP service points and adds them at dedicated positions
    before and after the invocation of a RunnableEntity.
      In the following discussion the positions for the invocation of SWC RP service
      points is defined by the following pseudo-code for the invocation of a runnable
      entity:
      Example 4.37
          1    [Point A]
          2    <update context-local buffers>
          3    <VFB Runnable Start>();
          4    [runnable invocation]
          5    <VFB Runnable Return>();
          6    [Point B]
          7    <update global buffers>
          8    <RTE notifications>
The RTE input configuration may include SWCs from multiple suppliers that each con-
tain SWC-Internal RP service point ids. The same RP service point id
must never be used twice within the same ECU application and therefore the RTE
generator is required to reject input configurations that result in duplications  it is not
permitted to remap RP service point ids.
[SWS_Rte_06066] d The RTE generator shall reject configurations that contain SWCs
with duplicate SWC-Internal RP service point ids. c(SRS_Rte_00244)
In addition to SWC-Internal RP service point ids the RTE generator is required
to assign RP service point ids used for RTE hooks. To avoid conflicts with SWC-
Internal RP service point ids the input configuration describes permitted range
for IDs for such RP service points.
To enable Pre and Post RP service point invocations to be distinguished differ-
ent RP service point id are used  a unique ID is used for each RP service
point invocation.
[SWS_Rte_06067] d The RTE generator shall assign the next unused RP service
point id for the RP service point invocations at [Point A] and [Point B]
from the permitted range. c(SRS_Rte_00244)
[SWS_Rte_06068] d The permitted range is defined as minServicePointId to
maxServicePointId inclusive. c(SRS_Rte_00244)
The RP service point ids assigned by the RTE generator are documented in the
generated configuration as part of the RptProfile. See Example 4.37 for locations
of [Point A] and [Point B].
Example 4.38
   1   if ( FALSE == <RPRunnableDisablerFlag> )
   2   {
   3      [VFB Trace event - runnable start]
   4      symbol() /* runnable invocation */
   5      [VFB Trace event - runnable return]
   6   }
The conditional execution of the original symbol is unrelated to the normal condi-
tionality of the invocation, e.g. due to the presence of prescalers created by the RTE
generator when multiple RTEEvents are mapped to the task. Mofication, e.g. incre-
ment, of the prescalers should occur even when the RP runnable disabler flag
is TRUE. Example 4.39 shows the combination of RP runnable disabler flag
with RTE generated conditional execution that invokes the runnable once every five
task activations.
Example 4.39
   1   if ( --Rte_RunnableDivide == 0 )
   2   {
   3      Rte_RunnableDivide = 5u;
   4      if ( FALSE == <RPRunnableDisablerFlag> )
   5      {
   6         [VFB Trace event - runnable start]
   7         symbol() /* runnable invocation */
   8         [VFB Trace event - runnable return]
   9      }
  10   }
Note that there is no ability to control the execution of RTEEvents since the intent is to
avoid the side effects of the runnable whatever the triggering event therefore the same
conditionality applies to all uses of the runnable.
[SWS_Rte_06077] d For each conditional in the input rptExecutionControl
the RTE generator shall document the generated RP runnable disabler flag in
the exported RptSupportData. c(SRS_Rte_00244)
Example 4.40
   1   /* RP global measurement buffer = global master data */
   2   SWCB_Bypass_P1_D_Original = global_P1_D;
   3
   4   if ( FALSE == SWCB_Bypass_P1_D_Enable )
   5   {
   6       /* Bypass disabled */
   7       /* RP global buffer = global master data */
   8       SWCB_Bypass_P1_D = SWCB_Bypass_P1_D_Original;
   9   }
  10
  11   /* context-local buffer */
  12   local_P1_D = SWCB_Bypass_P1_D;
Example 4.41
4.9.5.7 Export
For both SWC-Internal and RTE-Assigned RP service point ids the RTE gener-
ator must describe the invoked RP service functions so that the information can
be accessed by the RP system after RTE generation13 .
The exported RTE McSupportData is used to describe the generated configuration and
consists of:
    RptSupportData describing RP execution contexts
    Invoked RP service points (whether SWC-Internal or RTE-Assigned).
    Relationship between RptExecutableEntityEvent and pre-functional RP
     service point.
    Relationship between RptExecutableEntityEvent and post-functional RP
     service point.
    Relationship between RptExecutableEntityEvent and RP runnable
     disabler flag.
In the following requirements [Point A] and [Point B] refer to locations defined
in Example 4.37.
[SWS_Rte_06080] d When a RunnableEntity has implicit read access to a Vari-
ableDataPrototype for which RP service points are generated according to
[SWS_Rte_06064] then the RTE generator shall export rptServicePointPre at the
according RptExecutableEntityEvent documenting the RP service points
generated at [Point A]. c(SRS_Rte_00244)
[SWS_Rte_06081] d When a RunnableEntity has implicit write access to a
VariableDataPrototype for which RP service points are generated accord-
ing to [SWS_Rte_06064] then the RTE generator shall export rptServicePoint-
  13
   To be fully used by an RPT system the information exported by the RTE generator may need sub-
sequent augmentation to add details that are not known to the RTE generator, e.g. address information.
sic software modules within one ECU. Transformers for intra-ECU communication are
restricted to unqueued S/R communication. In addition no transformer chains are appli-
cable. Those limitations are formulated since for the currently known use-cases there
is no need for introducing this functionality.
The execution of the transformers and the necessary buffer handling is coordinated by
the RTE.
[SWS_Rte_08794] d The RTE shall execute data transformation for inter-ecu commu-
nication if a DataTransformation is referenced by an ISignal that references a
SystemSignal which
  1. is referenced by a SenderReceiverToSignalMapping, ClientServer-
     ToSignalMapping or TriggerToSignalMapping
  2. or is referenced by a SystemSignalGroup in the role transformingSys-
     temSignal if the SystemSignalGroup is referenced by a SenderReceiver-
     ToSignalGroupMapping
c(SRS_Rte_00247)
Note:
In case of fan-in of inter-ECU communication where the ISignals use different data
transformations, the RTE has to ensure that it executes the correct transformer chain
that belongs to exactly that ISignal. This could be achieved for example by remem-
bering within the Com callback which DataTransformation belongs to the received
data.
[SWS_Rte_08795] d The RTE shall execute all transformers of a transformer chain
in their execution order for queued (event semantics) sender-receiver communication
even when the queue is empty (because no data are available) if executeDespite-
DataUnavailability of DataTransformation is enabled and the Rte_Receive
API has non-blocking characteristics according to [SWS_Rte_01288]. The input to
all the transformers in the chain shall be NULL with a dataLength equal to 0. c
(SRS_Rte_00247)
Please note: This functionality is only available on the receiving side of queued
Sender/Receiver communication. Furthermore, if Signal fan-in is used, no signal shall
have the attribute executeDespiteDataUnavailability set to true (see [con-
str_3208]).
There are two main cases considered when executeDespiteDataUnavailabil-
ity is important: an empty queue in case of queued S/R communication and errors in
the COM stack so that the RTE doesnt get data from Com or LdCom.
[SWS_Rte_08105] d The RTE shall execute data transformation for intra-ecu commu-
nication if a DataTransformation is referenced by a DataPrototypeMapping. c
(SRS_Rte_00253)
[SWS_Rte_08107] d For VariableAccess in the roles dataReceivePointB-
yArgument, dataReceivePointByValue or dataSendPoint the RTE shall ex-
ecute data transformation from within the called RTE API. c(SRS_Rte_00253)
In case of implicit sender-receiver communication, the execution of the data
transformation takes place on sender side after execution of the RunnableEn-
tity/BswSchedulableEntity and on receiver side before the start of the
RunnableEntity/BswSchedulableEntity.
[SWS_Rte_08108] d For VariableAccess in the dataReadAccess role the RTE
shall execute data transformation before start of the RunnableEntity/BswSchedu-
lableEntity. c(SRS_Rte_00253)
[SWS_Rte_08518] d The input for the first transformer (in execution order) on receiver
side for inter-ECU sender-receiver communication shall be the received data from the
Com stack. c(SRS_Rte_00247)
[SWS_Rte_08519] d The input for the first transformer (in execution order) on client
side for client-server communication shall be the data from the ClientServerOper-
ation by the SWC. c(SRS_Rte_00247)
[SWS_Rte_08520] d The input for the first transformer (in execution order) on server
side for the request of a client-server communication shall be the received data from
the Com stack. c(SRS_Rte_00247)
[SWS_Rte_08521] d The input for the first transformer (in execution order) on server
side for the response of a client-server communication shall be the data from the
ClientServerOperation by the SWC. c(SRS_Rte_00247)
[SWS_Rte_08522] d The input for the first transformer (in execution order) on client
side for the response of a client-server communication shall be the received data from
the Com stack. c(SRS_Rte_00247)
The input for the first transformer (in execution order) on the Trigger Source side for
external trigger communication contains no payload data (See [SWS_Xfrm_00102] in
[26, ASWS Transformer General]).
[SWS_Rte_08597] d The input for the first transformer (in execution order) on Trigger
Sink side for external trigger communication shall be the received data from the Com
stack. c(SRS_Rte_00247)
[SWS_Rte_08523] d The output of the last transformer (in execution order) on sender
side for inter-ECU sender-receiver communication shall be transmitted to the Com
stack. c(SRS_Rte_00247)
[SWS_Rte_08524] d If data conversion does not apply, the output of the last trans-
former (in execution order) on receiver side for sender-receiver communication shall
be handed over to the SWC. c(SRS_Rte_00247)
[SWS_Rte_04541] d If data conversion applies, the RTE shall convert the output of the
last transformer (in execution order) on receiver side for sender-receiver communica-
tion before handing it over to the SWC. c(SRS_Rte_00247)
[SWS_Rte_08525] d The output of the last transformer (in execution order) on client
side for the request of a client-server communication shall be transmitted to the COM
or Com stack. c(SRS_Rte_00247)
[SWS_Rte_08598] d The output of the last transformer (in execution order) on Trigger
Source side for external trigger communication shall be transmitted to the Com stack.
c(SRS_Rte_00247)
[SWS_Rte_08599] d On Trigger Sink side for external trigger communication, the RTE
shall trigger the execution of the triggered RunnableEntity if no transformer in the
transformer chain returns a hard error. c(SRS_Rte_00247)
Transformer 4 Transformer 4
Transformer 5 Transformer 5
Transformer 6 Transformer 6
                          Receiving                                                    Receiving
         ISignal1         Application       ISignal2                  ISignal1         Application         ISignal2
                            SWC                                                          SWC
[SWS_Rte_08531] d The RTE shall provide the buffer to the transformers which con-
tains their input data. c(SRS_Rte_00248)
[SWS_Rte_08532] d If the attribute inPlace in the BufferProperties of a Trans-
formationTechnology is not set, the RTE shall provide a separate buffer to the
transformers in which they can write their output. c(SRS_Rte_00248)
If the attribute inPlace in the BufferProperties of a TransformationTech-
nology is set, the RTE doesnt need to provide a separate output buffer to the trans-
former because with inplace buffer handling the transformer will read the input data
from a buffer and writes its output into the same buffer. For this, the RTE hands over
to the transformer a pointer and a length which represents the buffer both for input an
output.
[SWS_Rte_08533] d The RTE shall provide a buffer to the transformer for the trans-
formers output. c(SRS_Rte_00248)
[SWS_Rte_08534] d The RTE shall calculate the needed buffer size for the output
buffer size using the formula specified in bufferComputation. c(SRS_Rte_00248)
[SWS_Rte_08535] d The RTE shall interprete the formula specified in the Com-
puScale in the role bufferComputation as a function: OutputBuf f erLength =
CompuScale(InputBuf f erLength) c(SRS_Rte_00248)
[SWS_Rte_03867] d The RTE shall calculate the InputBuf f erLength (used for output
buffer calculation; see [SWS_Rte_08535]) the following way:
    For External Triggers:
     The InputBuf f erLength shall be 0.
    For Sender/Receiver communication:
     The InputBuf f erLength shall be equal to the size needed for VariableDat-
     aPrototype of the dataElement of the SenderReceiverInterface that
     shall be transformed.
    For Client/Server communication:
     The InputBuf f erLength shall be the sum of
         the size of the TransactionHandle
         for the request: the sizes of the VariableDataPrototypes of all
          IN and INOUT arguments of the ClientServerOperation of the
          ClientServerInterface
         or for the response:
               the sizes of the VariableDataPrototypes of all INOUT and OUT
                arguments of the ClientServerOperation of the ClientServer-
                Interface
               1 Byte for the return code of the ClientServerOperation of the
                ClientServerInterface if at least one possibleError is defined
                for the ClientServerInterface.
c(SRS_Rte_00248)
The BufferProperties contain a CompuScale in the role bufferComputation
which describes the computation formula how to create the size of the output buffer
depending of the size of the input buffer. Because transformer chains are modeled for
the sending side, the formula has to be inversed for the receiving side.
The input of this formula is the size of the AUTOSAR data type of the interface.
[SWS_Rte_08536] d The RTE shall consider the headerLength information in the
BufferProperties if inPlace in the BufferProperties is set:
    On the sending side (transformation) the RTE shall increase the buffer from the
     beginning by the size given in headerLength.
    On the receiving side (retransformation) the RTE shall decrease the buffer from
     the beginning by the size given in headerLength.
c(SRS_Rte_00248)
If a transformer with in-place buffering on the sending side for example is configured to
add a header, the RTE is responsible for handing over a buffer which is large enough.
So the buffer grows beween two transformers if the second of those adds a header
with in-place buffering. To realize this, the RTE can have a buffer which stays the same
size and is large enough to hold the output of the last transformer but only subsets of
the buffer are handed over to the transformers depending on the buffer size needs of
the specific transformers in the chain. This can be achieved by pointers. A free space
in front of the existing data to insert the header there can be provided by the RTE by
descreasing the pointer address which is handed over to the transformer. This adds
a free space to the beginning of the buffer. It can be determined how long the header
shall be by headerLength of BufferProperties.
The corresponding retransformer on the receiving side (which implements the inverse
operation) has to remove the header. For this, the transformer simply has to make sure
that no part of its output is inside the place of the header which shall be removed. From
this transformer to the next one, the RTE increases the pointer address by the length
of the header and hence removes the header using that mechanism.
[SWS_Rte_08537] d If the attribute inPlace in the BufferProperties of a Trans-
formationTechnology is set and a fanout in the transformer optimization is di-
rectly done before this transformer, the RTE shall duplicate the buffer beforehand. c
(SRS_Rte_00248)
[SWS_Rte_08550] d The RTE shall hand over the original data provided by a software
component to a transformer on the sender side if the attribute needsOriginalData
is set to true. c(SRS_Rte_00248)
The interfaces of the transformers depend on the transformer chain in which the trans-
former is placed and the transformed data. They are specified in [26, ASWS Trans-
former General].
Also see chapter 5.10.4.
[SWS_Rte_08538] d The RTE shall determine which data are passed up from a trans-
former to the SWC by using the PortInterfaceMapping or ISignal.Transfor-
mationISignalProps. DataPrototypeTransformationProps.networkRep-
resentationProps (See Chapter 4.3.6.2. c(SRS_Rte_00247)
Errors can be soft errors and hard errors. Soft errors correspond to warnings and hard
errors stop the execution of the transformer chain. For client server communication it
is possible on the server side to trigger an autonomous error reaction which generates
the response of the client server communication automatically without involvement of
any runnable.
[SWS_Rte_08540] d The RTE shall continue with the execution of a transformer chain
if a transformer returns a soft error. c(SRS_Rte_00249)
[SWS_Rte_08541] d The RTE shall abort the execution of a transformer chain if a
transformer returns a hard error and executeDespiteDataUnavailability of the
DataTransformation is set to false. c(SRS_Rte_00249)
[SWS_Rte_08424] d The RTE shall continue with the execution of a transformer chain
if a transformer returns a hard error and executeDespiteDataUnavailability of
the DataTransformation is set to true. c(SRS_Rte_00249)
A transformer shall not modify its output buffer, when it returns a hard error to the RTE
(see [SWS_Xfrm_00051]).
To return the transformer errors to the runnables, the RTE APIs which can trigger
transformer executions have a parameter which is written by the RTE and read by the
SWC if the attribute errorHandling of PortAPIOption is set to transformer-
ErrorHandling.
[SWS_Rte_08558] d If a transformer which doesnt transform the request of a client
server communication on the server side (i.e., a transformer that either transforms the
request of a client server communication on the client side or transforms the response
of a client server communication or transforms an sender receiver communication)
returns a hard error, the Rte shall notify this hard error to the runnable which called the
RTE API that triggered the transformer execution. c(SRS_Rte_00249)
[SWS_Rte_07417] d If a transformer which transforms the request of a client server
communication on the server side returns a hard error, the Rte shall not trigger the
assigned OperationInvokedEvents for the server runnables. c(SRS_Rte_00249)
[SWS_Rte_07418] d If a transformer which transforms the request of a client server
communication on the server side returns a hard error, the Rte shall trigger the as-
signed TransformerHardErrorEvents. c(SRS_Rte_00249)
[SWS_Rte_07419] d If a transformer which transforms the request of a client server
communication on the server side returns a hard error, the transformerClass is
equal to serializer and csErrorReaction is set to autonomous, the Rte shall
trigger an autonomous error reaction. c(SRS_Rte_00249)
[SWS_Rte_07420] d For an autonomous error reaction the Rte shall execute the trans-
former chain of the response of the client server communication on the server side with
the following arguments:
    TransactionHandle shall be handed over in an unaltered fashion
    As return value the error code of the transformer which issued the hard error shall
     be used
    All parameters passed by value shall be equal to 0
    All parameters passed by reference shall be equal to NULL_PTR
c(SRS_Rte_00249)
Note: The result of this executed transformer chain can be treated by the Rte like a
regular response.
[SWS_Rte_08559] d If no transformer in the transformer chain returned a hard error
and at least one transformer returned a soft error, the Rte shall notify the first soft error
(in transformer execution order) to the SWC. c(SRS_Rte_00249)
[SWS_Rte_08584] d If multiple custom transformers in a transformer chain (Trans-
formationTechnology with transformerClass set to custom) produce more
than one error and all errors are soft errors, the RTE shall hand over to the SWC
the first soft error of all custom transformers (in execution order). c(SRS_Rte_00249)
[SWS_Rte_08585] d If multiple custom transformers in a transformer chain (Trans-
formationTechnology with transformerClass set to custom) produce more
than one error and on of those is a hard error, the RTE shall hand over to the SWC
this hard error (which caused the abortion of the execution of the transformer chain). c
(SRS_Rte_00249)
5       RTE Reference
Everything should be as simple as possible, but no simpler.
 Albert Einstein
5.1     Scope
This chapter presents the RTE API from the perspective of AUTOSAR applications
and basic software  the same API applies to all software whether they are AUTOSAR
software-components or basic software.
Section 5.2 presents basic principles of the API including naming conventions and
supported programming languages. Section 5.3 describes the header files used by the
RTE and the files created by an RTE generator. The data types used by the API are
described in Section 5.5 and Sections 5.6 and 5.7 provide a reference to the RTE API
itself including the definition of runnable entities. Section 5.11 defines the events that
can be monitored during VFB tracing.
The RTE is required to support components written using the C and C++ programming
languages [SRS_Rte_00126] as well as legacy software modules. The ability for mul-
tiple languages to use the same generated RTE is an important step in reducing the
complexity of RTE generation and therefore the scope for errors.
[SWS_Rte_01167] d The RTE shall be generated in C. c(SRS_Rte_00126)
[SWS_Rte_01168] d All RTE code, whether generated or not, shall conform to the
MISRA C standard [27]. In technically reasonable, exceptional cases MISRA viola-
tions are permissible. Except for MISRA rules #5.1 to #5.5 and and directive #1.1,
such violations shall be clearly identified and documented. Specified MISRA violations
are defined in Appendix C. In realistic use cases, the RTE will generate C identifiers
(functions, types, variables, etc) whose name will be longer than the maximum size
supported by the MISRA C standard (rules #5.1 to #5.5 and directive #1.1). Users
should configure the RTE to indicate the maximum C identifiers size supported by
their tool chain to make sure that no issues will be caused by these MISRA violations.
c(SRS_BSW_00007)
Specified MISRA violations are defined in Appendix C.
In realistic use cases, the RTE will generate C identifiers (functions, types, variables,
etc) whose name will be longer than the maximum size supported by the MISRA C
standard. Users should configure the RTE to indicate the maximum C identifiers size
supported by their tool chain to make sure that no issues will be caused by these
MISRA violation.
Compatibility mode is the default operating mode for an RTE generator and guarantees
compatibility even between RTE generators from different vendors through the use of
well-defined, standardized, data structures. The data structures that are used by the
generated RTE in the compatibility mode are defined in Section 5.4.
Vendor mode is an optional operating mode where the data structures defined in the
RTE Contract phase and used in the RTE Generation phase are implementation
specific rather than standardized.
[SWS_Rte_01152] d An RTE generator may optionally support vendor mode.                  c
(SRS_Rte_00083)
The data structures defined and declared when an RTE generator operates in vendor
mode are implementation specific and therefore not described in this document. This
omission is deliberate and permits vendor-specific optimizations to be implemented for
object-code components. It also means that RTE generators from different vendors
are unlikely to be compatible when run in the vendor mode.
[SWS_Rte_01234] d An AUTOSAR software-component shall be assumed to be
operating in compatibility mode unless vendor mode is explicitly requested. c
(SRS_Rte_00145, SRS_Rte_00146)
The potential for more efficient implementations of object-code components offered by
the vendor mode comes at the expense of requiring high cohesion between object-
code components (compiled after the RTE Contract phase) and the generated RTE.
However, this is not as restrictive as it may seem at first sight since the tight coupling
is also reflected in many other aspects or the AUTOSAR methodology, not least of
which is the requirement that the same compiler (and compatible options) is used when
compiling both the object-code component and the RTE.
The actual RTE code is generated  based on the input information  for each ECU
individually. To allow optimization during the RTE generation one of the two general
optimization directions can be specified: MEMORY consumption or execution RUNTIME.
[SWS_Rte_05053] d The RTE Generator shall optimize the generated RTE code ei-
ther for memory consumption or execution runtime depending on the provided input
information RteOptimizationMode. c(SRS_Rte_00023)
The generated RTE code has to respect several rules in order to be integrated with
other AUTOSAR software in the build process.
[SWS_Rte_05088] d All memory1 allocated by the RTE shall be wrapped in the Mem-
ory Allocation Keyword as defined in the Specification of Memory Mapping [28] using
RTE as the <PREFIX>. c(SRS_Rte_00148, SRS_Rte_00169)
Due to the structure of the AUTOSAR Meta Model the input configuration might contain
several DataPrototypes which are resulting only in one memory object. In this case
it is required to define rules which SwAddrMethod is used to allocate the memory and
to decide about its initialization. Therefore precedence rules for SwAddrMethods are
defined by [SWS_Rte_07590] and [SWS_Rte_07591].
In order to ensure proper allocation of the variables and code instantiated by RTE, the
RTE code utilizes the memory mapping mechanism described in document [28]. The
requirements below follow the principles of the document [28], section "Requirements
on implementations using memory mapping header files for BSW Modules and Soft-
ware Components". However the basic granularity of constants and variables created
due to DataPrototypes in the input configuration is driven by the properties of the
applied data types and the applied SwAddrMethods.
[SWS_Rte_07589] d For AutosarDataPrototype implementations the
<SEGMENT> infix for the Memory Allocation Keyword shall be set to the short-
Name of the preceding SwAddrMethod if there is one defined and if [SWS_Rte_07592]
is not applicable. c(SRS_Rte_00148, SRS_Rte_00169)
[SWS_Rte_07047] d If the memoryAllocationKeywordPolicy of the preceding
SwAddrMethod is set to addrMethodShortName the <ALIGNMENT> suffix with lead-
ing underscore of the Memory Allocation Keyword used by the AutosarDat-
  1
  memory refers to all elements in the generated RTE which will later occupy space in the ECUs
memory and is directly associated with the RTE. This includes code, static data, parameters, etc.
The concept of RTE requires that objects and definitions which are related to one soft-
ware component are generated in a global name space. Nevertheless in this global
name space labels have to be unique for instance to support a correct linkage by
C Linker Locater. To ensure unique labels such objects and definitions related to a
specific software component are typically prefixed or infixed with the component type
symbol.
When AtomicSwComponentTypes of several vendors are integrated in the same
ECU name clashes might occur if the identical component type name is accidentally
used twice. To ease the dissolving of name clashes the RTE supports the supersed-
ing of the AtomicSwComponentType.shortName with the SymbolProps.symbol
attribute.
The resulting name related to an AtomicSwComponentType is called component
type symbol in this document.
[SWS_Rte_06714] d The component type symbol shall be the value of the Sym-
bolProps.symbol attribute of the AtomicSwComponentType if the symbol attribute
is defined. c()
[SWS_Rte_06715] d The component type symbol shall be the shortName of the
AtomicSwComponentType if no symbol attribute for this AtomicSwComponent-
Typeis defined. c()
Please note that the component type symbol is not applied for file names, e.g
Application Header File or includes of Memory Mapping Header files. Its expected that
a build environment can handle two equally named files.
There are use-cases where there is need to influence the behavior of the RTE Gen-
erator without changing the RTE Configuration description. In order to support such
use-cases this section collects the external configuration switches.
Note: it is not specified how these switches shall be implemented in the actual RTE
Generator implementation.
Unconnected R-Port check
[SWS_Rte_05099] d The RTE Generator shall support the external configuration
switch strictUnconnectedRPortCheck which, when enabled, forces the RTE
Generator to consider unconnected R-Ports as an error. c(SRS_Rte_00139)
Missing input configuration check
[SWS_Rte_05148] d The RTE Generator shall support the external configuration
switch strictConfigurationCheck which, when enabled, forces the RTE Gen-
erator to consider missing input configuration information as an error. If the external
mapping but has the advantage that the handle used to access the API can be stored
in memory and accessed, via an iterator, to apply the same API to multiple ports.
All RTE symbols (e.g. function names, global variables, etc.) visible within the global
namespace are required to use the Rte prefix.
[SWS_Rte_01171] d All externally visible symbols created by the RTE generator shall
use the prefix Rte_.
This rule shall not be applied for the following symbols:
    type names representing AUTOSAR Data Types (specified in [SWS_Rte_07104],
     [SWS_Rte_07109], [SWS_Rte_07110], [SWS_Rte_07111], [SWS_Rte_07114],
     [SWS_Rte_07144], [SWS_Rte_07148])
    enumeration literals       of   implementation     data     types   (specified   in
     [SWS_Rte_03810])
    range limits of ApplicationDataTypes (specified in [SWS_Rte_05052])
This rule shall be applied for RTE internal types to avoid name clashes with other
modules and SWCs. c(SRS_BSW_00307, SRS_BSW_00300, SRS_Rte_00055)
In order to maintain control over the RTE namespace the creation of symbols in the
global namespace using the prefix Rte_ is reserved for the RTE generator.
The generated RTE is required to work with components written in several source lan-
guages and therefore should not use language specific features, such as C++ names-
paces, to ensure symbol name uniqueness.
The direct invocation form is the form used to present the RTE API in Section 5.6. The
RTE direct API mapping is designed to be optimizable so that the instance handle is
elided (and therefore imposes zero run-time overhead) when the RTE generator can
determine that exactly one instance of a component is mapped to an ECU.
All runnable entities for a AUTOSAR software-component type are passed the same
instance handle type (as the first formal parameter) and can therefore use the same
type definition from the components application header file.
The direct API can also be further optimized for source code components via the API
mapping.
The direct API is typically implemented as macros that are modified by the RTE gen-
erator depending on configuration. This technique places certain restrictions on how
the API can be used within a program, for example, it is not possible in C to take the
address of a macro and therefore direct API functions cannot be placed within a func-
tion table or array. If it is required by the implementation of a software-component to
derive a pointer to an object for the port API the PortAPIOption enableTakeAd-
dress can be used. For instance in an implementation of an AUTOSAR Service this
feature might be used to setup a constant function pointer table storing the configura-
tion of callback functions per ID. Additionally the indirect API provides support for API
addresses and iteration over ports.
[SWS_Rte_07100] d If a PortPrototype is referenced by PortAPIOption with en-
ableTakeAddress = TRUE the RTE generator shall provide true/native C functions
(as opposed to function-like preprocessor macros) for the API related to this port. c()
The PortAPIOption enableTakeAddress = TRUE is not supported for software-
components supporting multiple instantiation.
The indirect API is an optional form of API invocation that uses indirection through
a port handle to invoke RTE API functions rather than direct invocation. This form
is less efficient (the indirection cannot be optimized away) but supports a different
programming style that may be more convenient. For example, when using the indirect
API, an array of port handles of the same interface and provide/require direction is
provided by RTE and the same RTE API can be invoked for multiple ports by iterating
over the array.
Both direct and indirect forms of API call are equivalent and result in the same gener-
ated RTE function being invoked.
Whether the indirect API is generated or not can be specified for each software com-
ponent and for each port prototype of the software component separately with the
indirectAPI attribute.
The semantics of the port handle must be the same in both the RTE Contract and
RTE Generation phases since the port handle accesses the standardized data struc-
tures of the RTE.
It is possible to mix the indirect and direct APIs within the same SW-C, if the indirect
API is present for the SW-C.
The indirect API uses port handles during the invocation of RTE API calls. The type
of the port handle is determined by the port interface that types the port which means
that if a component declares multiple ports typed by the same port interface the port
handle points to an array of port data structures and the same API invoked for each
element.
The port handle type is defined in Section 5.4.2.5.
An AUTOSAR SW-C needs to obtain port handles using the instance handle before the
indirect API can be used. The definition of the instance handle in Section 5.4.2 defines
the Port API section of the component data structure and these entries can be used
to access the port handles in either object-code or source-code components.
The API Rte_Ports and Rte_NPorts provides port data handles of a given interface.
Example 5.1 shows how the indirect API can be used to apply the same operation to
multiple ports in a component within a loop.
Example 5.1
The port handle points to an array that can be used within a loop to apply the same
operation to each port. The following example sends the same data to each receiver:
   1   void TT1(Rte_Instance instance)
   2   {
   3     Rte_PortHandle_interface1_P my_array;
   4     my_array=Rte_Ports_interface1_P(instance);
   5     uint8 s;
   6     for(s = 0u; s < Rte_NPorts_interface1_P(instance); s++) {
   7       my_array[s].Send_a(23);
   8     }
   9   }
The RTE is required to support access to data with implicit semantics. The required
semantics are subject to two constraints:
    For VariableAccess in the dataReadAccess role, the data accessed by a
     runnable entity must not change during the lifetime of the runnable entity.
    For VariableAccess in the dataWriteAccess role, the data written by a
     runnable entity is only visible to other runnable entities after the accessing runn-
     able entity has terminated.
The generated RTE satisfies both requirements through data copies that are created
when the RTE is generated based on the known task and runnable mapping.
Example 5.2
Example 5.3
The API calls are used by re1 and re2 as required. The definitions of the API depend
on where the data copies are defined. If both re1 and re2 are mapped to the same
task then each can access the same copy. However, if re1 and re2 are mapped to
different (pre-emptable) tasks then the RTE will ensure that each API access a different
copy.
The Rte_IRead and Rte_IWrite use the data handles defined in the component
data structure (see Section 5.4.2).
The Rte_Pim API does not impose the RTE to apply a data consistency mechanism
for the access to Per Instance Memory. An application is responsible for consistency
of accessed data by itself. This design decision permits efficient (zero overhead) ac-
cess when required. If a component possesses multiple runnable entities that require
concurrent access to the same Per Instance Memory, an exclusive area can be used to
ensure data consistency, either through explicit Rte_Enter and Rte_Exit API calls
or by declaring that, implicitly, the runnable entities run inside an exclusive area.
Thus, the Per Instance Memory is exclusively used by a particular software-component
instance and needs to be declared and allocated (statically).
In general there are two different kinds of Per Instance Memory available which are
varying in the typing mechanisms. C typed PerInstanceMemory is typed by
the description of a C typedef whereas arTypedPerInstanceMemory (AUTOSAR
Typed Per Instance Memory ) is typed by the means of an AutosarDataType. Nev-
ertheless both kinds of Per Instance Memory are accessed via the Rte_Pim API.
[SWS_Rte_07161] d The generated RTE shall declare arTypedPerInstanceMem-
ory in accordance to the associated ImplementationDataType of a particular
arTypedPerInstanceMemory. c(SRS_Rte_00013, SRS_Rte_00077)
Note: The related AUTOSAR data type will generated in the RTE Types Header File
(see chapter 5.3.6).
[SWS_Rte_02303] d The generated RTE shall declare C typed PerInstanceMem-
ory in accordance to the attribute type of a particular PerInstanceMemory. c
(SRS_Rte_00013, SRS_Rte_00077)
In addition, the attribute type needs to be defined in the corresponding software-
component header. Therefore, the attribute typeDefinition of the PerInstance-
Memory contains its definition as plain text string. It is assumed that this text is valid
C syntax, because it will be included verbatim in the application header file.
[SWS_Rte_02304] d The generated RTE shall define the type of a C typed PerIn-
stanceMemory by interpreting the text string of the attribute typeDefinition of
a particular PerInstanceMemory as the C definition. This type shall be named
according to the attribute type of the PerInstanceMemory. c(SRS_Rte_00013,
SRS_Rte_00077)
[SWS_Rte_07133] d The type of a C typed PerInstanceMemory shall be defined
in the RTE Types Header File as
typedef <typedefinition> Rte_PimType_<cts>_<type>;
where <typedefinition> is the content of the typeDefinition attribute of the
PerInstanceMemory,
<type> is the type name defined in the type attribute of the the PerInstanceMem-
ory and
<cts> the component type symbol of the AtomicSwComponentType to which
the PerInstanceMemory belongs.. c(SRS_Rte_00013, SRS_Rte_00077)
c(SRS_Rte_00013, SRS_Rte_00077)
[SWS_Rte_07183] d The generated RTE shall instantiate (or allocate) declared
arTypedPerInstanceMemory. c(SRS_Rte_00013, SRS_Rte_00077)
[SWS_Rte_07184] d The generated RTE shall initialize declared arTypedPerIn-
stanceMemory according the ValueSpecification of the VariableDataPro-
totype defining the arTypedPerInstanceMemory if the general initialization con-
ditions in [SWS_Rte_07046] are fulfilled. c(SRS_Rte_00013, SRS_Rte_00077)
[SWS_Rte_05062] d In case the PerInstanceMemory or arTypedPerInstance-
Memory is used as a permanent RAM Block for the NvRam manager the name for the
instantiated PerInstanceMemory or arTypedPerInstanceMemory shall be taken
from the input information RteNvmRamBlockLocationSymbol. Otherwise the RTE
generator is free to choose an arbitrary name. c(SRS_Rte_00013, SRS_Rte_00077)
Note that, in cases where a PerInstanceMemory is not initialized due to
[SWS_Rte_07182] or [SWS_Rte_07184], the memory allocated for a PerInstance-
Memory is not initialized by the generated RTE, but by the corresponding software-
component instances.
[SWS_Rte_07693] d In case a ParameterDataPrototype in the role perInstan-
ceParameter is used as a ROM Block for the NVRam Manager, then the name for
the instantiated ParameterDataPrototype shall be taken from the input information
RteNvmRomBlockLocationSymbol. Otherwise the RTE generator is free to choose
an arbitrary name. c(SRS_Rte_00154)
Example 5.4
In Rte.c:
   1    /* declare and instantiate mem1 */
   2    /* "mem1" name may be taken from RteNvmRamBlockLocationSymbol */
   3    Rte_PimType_TheSwc_MyMemType mem1;
Note that the name used for the definition of the PerInstanceMemory may be used
outside of the RTE. One use-case is to support the definition of the link between the
NvRam Managers permanent blocks and the software-components. The name in
RteNvmRamBlockLocationSymbol is used to configure the location at which the
NvRam Manager shall store and retrieve the permanent block content. For a detailed
description please refer to the AUTOSAR Software Component Template [2].
The RTE API is implemented by macros and generated API functions that are created
(or configured, depending on the implementation) by the RTE generator during the
RTE Generation phase. Typically one customized macro or function is created for
each end of a communication though the RTE generator may elide or combine custom
functions to improve run-time efficiency or memory overheads.
[SWS_Rte_01274] d The API mapping shall be implemented in the application header
file. c(SRS_BSW_00330, SRS_Rte_00027, SRS_Rte_00051, SRS_Rte_00083,
SRS_Rte_00087)
The RTE generator is required to provide a mapping from the RTE API name to the
generated function [SRS_Rte_00051]. The API mapping provides a level of indirec-
tion necessary to support binary components and multiple component instances. The
indirection is necessary for two reasons. Firstly, some information may not be known
when the component is created, for example, the components instance name, but
are necessary to ensure that the names of the generated functions are unique. Sec-
ondly, the names of the generated API functions should be unique (so that the ECU
image can link correctly) and the steps taken to ensure this may make the names not
user-friendly. Therefore, the primary rationale for the API mapping is to provide the
required abstraction that means that a component does not need to concern itself with
the preceding problems.
The requirements on the API mapping depend on the phase in which an RTE gen-
erator is operating. The requirements on the API mapping are only binding for RTE
generators operating in compatibility mode.
Within the RTE Contract phase the API mapping is required to convert from the
source API call (as defined in Section 5.6) to the runnable entity provided by a software-
component or the implementation of the API function created by the RTE generator.
When compiled against a RTE Contract phase header file a software-component that
can be multiple instantiated is required to use a general API mapping that uses the
instance handle to access the function table defined in the component data structure.
[SWS_Rte_03706] d If a software-component supportsMultipleInstantiation,
the RTE Contract phase API mapping shall access the generated RTE functions using
the instance handle to indirect through the generated function table in the component
data structure. c(SRS_Rte_00051)
Example 5.5
For a require client-server port p1 with operation a with a single argument, the gen-
eral form of the API mapping would be:
   1   #define Rte_Call_p1_a(instance,v) ((instance)->p1.Call_a(v))
[SWS_Rte_06516] d The RTE Generator shall wrap each API mapping and API func-
tion definition of a variant existent API according table 4.17 if the variability shall be
implemented.
   1   #if (<condition> [||<condition>])
   2
   3   <API Mapping>
   4
5 #endif
where condition are the condition value macro(s) of the VariationPoints rel-
evant for the conditional existence of the RTE API (see table 4.17), API Mapping
is the code according an invariant API Mapping (see also [SWS_Rte_01274],
[SWS_Rte_03707], [SWS_Rte_03837], [SWS_Rte_01156]) c(SRS_Rte_00201)
Note: In case of explicit communication any existent access points in the meta model
might result in the related API which results in a or condition for the pre processor.
Example 5.6
For a require client-server port p1 with operation a with a single argument of the
component c1 defining a ServerCallPoint which is subject of variability in runn-
able run1, the general form of the conditional API mapping would be:
   1
   2   #if (Rte_VPCon_c1_run1_p1_a==TRUE)
   3
   4   #define Rte_Call_p1_a(instance,v) ((instance)->p1.Call_a(v))
   5
   6   #endif
be generated for single instantiated SWCs. Likewise for multiple instantiated SWCs a
function must also be generated in contract phase as the relevant fields in the CDS
are omitted and therefore macros cannot be used in the API mapping. In compatibility
mode and RTE phase the same limitations apply due to the constraints of the CDS.
Note that the rule described in [SWS_Rte_03837] does not apply for the life cycle
APIs, nor for the callback APIs, nor for the APIs that are implemented as macros
(see [SWS_Rte_01156]).
[SWS_Rte_06831] d In compatibility mode, the following API calls shall be imple-
mented either as macros (that map directly to the relevant field of the component data
structure) or as a C function (that may use the fields of the component data structure)
based on the state of the enableTakeAddress attribute [SWS_Rte_07100]:
    Rte_IRead
    Rte_IWrite
    Rte_IWriteRef
    Rte_IStatus
    Rte_IFeedback
    Rte_IInvalidate
c(SRS_Rte_00051)
Note: For [SWS_Rte_01156] and [SWS_Rte_06831] when the APIs are implemented
as macros the API mapping in the application header file directly uses relevant fields of
the component data structure. However the enableTakeAddress attribute only ap-
plies for single instantiated SWCs and therefore the body of the generated function can
directly access the relevant data if required without indirection through the component
data structure.
The functions generated that are the destination of the API mapping, which is created
during the RTE Contract phase, are created by the RTE generator during the second
RTE Generation phase.
[SWS_Rte_01153] d The generated function (or runnable) shall take the same param-
eters, in the same order, as the API mapping. c(SRS_Rte_00051)
Example 5.7
For a require client-server port p1 with operation a with a single argument for compo-
nent type c1 for which multiple instantiation is forbidden, the following mapping would
be generated:
   1   #define Rte_Call_p1_a Rte_Call_c1_p1_a
There are no requirements on the form that the API mapping created during the RTE
Generation phase should take. This is because the application header files defined
during this phase are used by source-code components and therefore compatibility
between the generated RTE and source-code components is automatic.
The RTE generator is required to produce the component data structure instances re-
quired by object-code components and multiple instantiated source-code components.
If multiple instantiation of a software-component is forbidden, then the API mapping
specified for the RTE Contract phase (Section 5.2.6.1) defines the names of the
generated functions. If multiple instantiation is possible, there are no corresponding
requirements that define the name of the generated function since all accesses to the
generated functions are performed via the component data structure which contains
well-defined entries (Sections 5.4.2.5 and 5.4.2.5).
Using the RTE Generation phase API mapping, it is possible for the RTE generator
to elide the use of generated RTE functions.
[SWS_Rte_01146] d If the API mapping elides an RTE function the RTE Generation
phase API mapping mechanism shall ensure that the invoking component still receives
a return value so that no changes to the AUTOSAR software-component are neces-
sary. c(SRS_Rte_00051)
In C, the elision of API calls can be achieved using a comma expression2
Example 5.8
Furthermore, assume that the communication attributes are specified such that the
sender-receiver communication can be performed as a direct assignment and there-
fore no RTE API call needs to be generated. However, the component source cannot
be modified and expects to receive an Std_ReturnType as the return. The RTE
Generation phase API mapping could then be rewritten as:
   1   #define Rte_Send_p1_a(s,a) (<var> = (a), RTE_E_OK)
Where <var> is the implementation dependent name for an RTE created cache be-
tween sender and receiver.
   2
    This is contrary to MISRA Rule 12.3 The comma operator should not be used .However, a comma
expression is valid, legal, C and the elision cannot be achieved without a comma expression and there-
fore the rule must be relaxed.
All API parameters fall into one of two classes; parameters that are strictly read-only
(In parameters) and parameters whose value may be modified by the API function
(In/Out and Out parameters).
The type of these parameters is taken from the data element prototype or operation
prototype in the interface that characterizes the port for which the API is being gener-
ated.
In the following, requirement [SWS_Rte_06806] reflects the standard defined by [29].
The remaining requirements are include to ensure the consistency between different
RTE implementations. The rules described below regarding the default argument pass-
ing strategy may be overwritten by more specific requirements, e.g. ServerArgu-
mentImplPolicy.
[SWS_Rte_06804] d All input parameters using the P2CONST macro shall
use memclass AUTOMATIC and ptrclass RTE_APPL_DATA. c(SRS_Rte_00060,
SRS_BSW_00007)
[SWS_Rte_06805] d All parameters using the VAR macro shall use memclass AUTO-
MATIC. c(SRS_Rte_00059, SRS_BSW_00007)
[SWS_Rte_06806] d All output and bi-directional parameters (i.e. both input and out-
put) parameters shall use the P2VAR macro. c(SRS_Rte_00061, SRS_BSW_00007)
[SWS_Rte_06807] d All parameters using the P2VAR macro shall use memclass
AUTOMATIC and ptrclass RTE_APPL_DATA. c(SRS_Rte_00059, SRS_Rte_00060,
SRS_BSW_00007)
    In Parameters
      [SWS_Rte_01017] d All input parameters that are a Primitive Imple-
      mentation Data Type shall be passed by value.       c(SRS_Rte_00059,
      SRS_Rte_00061)
      [SWS_Rte_01018] d All input parameters that are of type Structure Imple-
      mentation Data Type or Union Implementation Data Type shall be
      passed by reference. c(SRS_Rte_00060, SRS_Rte_00061)
      [SWS_Rte_05107] d All input parameters that are an Array Implementation
      Data Type shall be passed as an array expression (that is a pointer to the array
      base type). c(SRS_Rte_00060, SRS_Rte_00061)
      [SWS_Rte_07661] d All input parameters that are a data type of category
      DATA_REFERENCE shall be passed as a pointer to the data type specified by
      the SwPointerTargetProps. c(SRS_Rte_00059, SRS_Rte_00061)
      [SWS_Rte_07086] d All input parameters that are passed by reference
      ([SWS_Rte_01018]) or passed as an array expression ([SWS_Rte_05107]) shall
      be declared as pointer to const with the means of the P2CONST macro. c
      (SRS_Rte_00060, SRS_BSW_00007)
      Please note that the description of the P2CONST macro can be found in [30].
    Out Parameters
      [SWS_Rte_01019] d All output parameters that are of type Primitive Imple-
      mentation Data Type shall be passed by reference. c(SRS_Rte_00061)
      [SWS_Rte_07082] d All output parameters that are of type Structure Im-
      plementation Data Type or Union Implementation Data Type shall
      be passed by reference. c(SRS_Rte_00060, SRS_Rte_00061)
      [SWS_Rte_05108] d All output parameters that are an Array Implementa-
      tion Data Type shall be passed as an array expression (that is a pointer to
      the array base type). c(SRS_Rte_00060, SRS_Rte_00061)
      [SWS_Rte_07083] d All output parameters that are of type Pointer Imple-
      mentation Data Type shall be passed as a pointer to the Pointer Imple-
      mentation Data Type. c(SRS_Rte_00059, SRS_Rte_00061)
    In/Out Parameters
      [SWS_Rte_01020] d All bi-directional parameters (i.e. both input and output) that
      are of type Primitive Implementation Data Type or Structure Im-
Example 5.9
This would be the Rte_Write API generated for the example 5.5 (example of a two
dimension array typed by an ImplementationDataType):
   1   FUNC(Std_ReturnType, RTE_CODE) Rte_Write_<p>_<o>(P2CONST(uint8,
          AUTOMATIC, AUTOMATIC) data)
A subset of the RTE APIs returning the values instead of using OUT Parameters. In
the API section these API signatures defining a <return> value. In addition to the
following rules some of the APIs might specify additionally const qualifiers.
[SWS_Rte_07069] d The RTE Generator shall determine the <return> type accord-
ing the applicable ImplementationDataType of the DataPrototype for which the
API provides access. c(SRS_Rte_00059)
[SWS_Rte_08300] d A pointer return value of an RTE API shall be declared as pointer
to const with the means of the FUNC_P2CONST macro or P2CONST if the pointer is not
used to modify the addressed object. c(SRS_Rte_00059)
Please note that the FUNC_P2CONST macro is applicable if the RTE API is implemented
as an real function and the P2CONST might be used if the RTE API is implemented as
a macro.
Requirement [SWS_Rte_08300] applies for instance for the RTE APIs Rte_Prm,
Rte_CData, Rte_IrvRead, Rte_IrvIRead in the cases where the API grants ac-
cess to composite data (arrays, structures, unions).
Please note, that the the implementation of the C data types are specified in section
5.3.4 "RTE Types Header File".
[SWS_Rte_07070] d If the DataPrototype is associated to a Primitive Imple-
mentation Data Type the RTE API shall return the value of the DataPrototype
for which the API provides access. The type name shall be equal to the shortName
of these ImplementationDataType. c(SRS_Rte_00059)
Example 5.10
Consider an RTE API call return a primitive as defined in the example 5.2 for a singly
instantiated SW-C. The signature of the API will be:
   1   MyUint8 Rte_IRead_<re>_<p>_<o>(void);
Please note that the usage of Compiler Abstraction is not shown in the example.
Example 5.11
Consider an RTE API call return a structure as defined in the example 5.6 for a singly
instantiated SW-C. The signature of the API will be:
   1
   2   FUNC_P2CONST(RecA, RTE_VAR_FAST_INIT, RTE_CODE)
   3                Rte_IRead_<re>_<p>_<o>(void);
Please note that the usage of Compiler Abstraction assumes that the SwAddrMethod
of the accessed VariableDataPrototype is named "VAR_FAST_INIT". Further
on the example does not respect the principles of API mapping.
Example 5.12
Consider an RTE API call return an array as defined in the example 5.4 for a singly
instantiated SW-C. The signature of the API will be:
   1   FUNC_P2CONST(unsigned char, RTE_VAR_POWER_ON_INIT, RTE_CODE)
   2                Rte_IRead_<re>_<p>_<o>(void);
Please note that the usage of Compiler Abstraction assumes that the SwAddrMethod
of the accessed VariableDataPrototype is named "VAR_POWER_ON_INIT".
Further on the example does not respect the principles of API mapping.
Example 5.13
Consider an RTE API call return an array as defined in the example 5.5 for a singly
instantiated SW-C. The signature of the API will be:
   1   FUNC_P2CONST(uint8, RTE_VAR_NO_INIT, RTE_CODE)
   2                Rte_IRead_<re>_<p>_<o>(void);
Please note that the usage of Compiler Abstraction assumes that the SwAddrMethod
of the accessed VariableDataPrototype is named "VAR_NO_INIT". Further on
the example does not respect the principles of API mapping.
A subset of the RTE APIs returning a reference to the memory location where the data
can be accessed instead of using IN/OUT Parameters. In the API section these API
signatures defining a <return reference> value.
[SWS_Rte_06808] d A <return reference> shall use the FUNC_P2VAR or P2VAR
macro. c(SRS_BSW_00007)
[SWS_Rte_06809] d A <return reference> which uses either the P2VAR or
the FUNC_P2VAR macro shall use memclass AUTOMATIC and ptrclass RTE_DATA. c
(SRS_BSW_00007)
[SWS_Rte_07076] d The RTE Generator shall determine the <return reference>
type according the applicable ImplementationDataType of the DataPrototype
for which the API provides access. c(SRS_Rte_00059)
Please note, that the the implementation of the C data types are specified in section
5.3.4 "RTE Types Header File".
[SWS_Rte_07077] d If the DataPrototype is associated to a Primitive Imple-
mentation Data Type the RTE API shall return a pointer to variable holding the
data of the value of the DataPrototype for which the API provides access. The
type name shall be equal to the shortName of these ImplementationDataType. c
(SRS_Rte_00059)
Example 5.14
Consider an RTE API call return a reference to a primitive as defined in the example
5.2 for a singly instantiated SW-C. The signature of the API will be:
   1   MyUint8 * Rte_IWriteRef_<re>_<p>_<o>(void);
Please note that the usage of Compiler Abstraction is not shown in the example.
Example 5.15
Consider an RTE API call return a reference to a structure as defined in the example
5.6 for a singly instantiated SW-C. The signature of the API will be:
   1   RecA * Rte_IWriteRef_<re>_<p>_<o>(void);
Please note that the usage of Compiler Abstraction is not shown in the example.
Example 5.16
Consider an RTE API call return a reference to an array as defined in the example 5.4
for a singly instantiated SW-C. The signature of the API will be:
   1   unsigned char * Rte_IWriteRef_<re>_<p>_<o>(void);
Example 5.17
Consider an RTE API call return a reference to an array as defined in the example 5.5
for a singly instantiated SW-C. The signature of the API will be:
   1   uint8 * Rte_IWriteRef_<re>_<p>_<o>(void);
Please note that the usage of Compiler Abstraction is not shown in the examples.
In RTE, error and status information is defined with the data type Std_ReturnType,
see Section 5.5.1.
[SWS_Rte_01329] d The RTE shall handle both require and provide ports that are not
connected. c(SRS_Rte_00139)
The handling of require ports as an error is described in requirement
[SWS_Rte_05099].
[SWS_Rte_06030] d The RTE shall consider a PRPortPrototype as always con-
nected. c(SRS_Rte_00139)
For the mode user an unconnected mode switch port behaves as if it was connected
to a mode manager that never sends a mode switch notification.
[SWS_Rte_02638] d A Rte_Mode API for an unconnected mode switch port of a mode
user shall return the initial state. c(SRS_Rte_00139)
[SWS_Rte_02639] d Regarding the modes of an unconnected mode switch port of a
mode user, the mode disabling dependencies on the initial mode shall be permanently
active and the mode disabling dependencies on all other modes shall be inactive. c
(SRS_Rte_00139)
[SWS_Rte_02640] d Regarding the modes of an unconnected mode switch port of a
mode user, RTE will only generate a SwcModeSwitchEvent for entering the initial
mode which occurs directly after startup. c(SRS_Rte_00139)
[SWS_Rte_02641] d The Rte_Switch API for an unconnected mode switch port
of the mode manager shall discard the input parameters and return RTE_E_OK. c
(SRS_Rte_00139)
[SWS_Rte_02642] d A blocking or non blocking Rte_SwitchAck API for an uncon-
nected mode switch port of the mode manager shall return RTE_E_UNCONNECTED
immediately. c(SRS_Rte_00139)
[SWS_Rte_01375] d A provided mode switch port of a mode manager shall be
considered unconnected only if there are no connections at the composition level and
no ModeAccessPoint exists for the provided mode switch port and no synchro-
nizedModeGroup refers to the provided mode switch port. c(SRS_Rte_00139)
5.2.7.3 Client-Server
Two ports are permitted to be connected provided that they are characterized by com-
patible, but not necessarily identical, interfaces. For the full definition of whether two
interfaces are compatible, see the Software Component Template [2].
[SWS_Rte_01368] d The RTE generator shall report an error if the [constr_1036] and
the [constr_1069] are violated so if two connected ports are connected by incompatible
interfaces. c(SRS_Rte_00137)
A significant issue in determining whether two interfaces are compatible is that the
interface characterizing the require port may be a strict subset of the interface char-
acterizing the provide port. This means that there may be provided data elements or
operations for which there is no corresponding element in the require port. This can be
imagined as a multi-strand wire between the two ports (the assembly connector) where
each strand represents the connection between two data elements or operations, and
where some of the strands from the provide end are not connected to anything at the
require end.
Define, for the purposes of this section, an unconnected element as a data element
or operation that occurs in the provide interface, but for which no corresponding data
element or operation occurs in a particular R-Ports interface.
[SWS_Rte_01369] d For each data element or operation within the provide interface,
every connected requirer with an unconnected element must be treated as if it were
not connected. c(SRS_Rte_00137)
Note that requirement [SWS_Rte_01369] means that in the case of a 1:n Sender-
Receiver the Rte_Write call may transmit to some but not all receivers.
The extreme is if all connected requirers have an unconnected element:
[SWS_Rte_01370] d For a data element or operation in a provide interface which
is an unconnected element in every connected R-Port, the generated Rte_Send,
Rte_Write, Rte_IWrite, or Rte_IWriteRef APIs must act as if the port were
unconnected. c(SRS_Rte_00137)
See Section 5.2.7 for the required behavior in this case.
The output of an RTE generator can consist of both generated code and configuration
for library code that may be supplied as either object code or source code. Both
configured and generated code reference standard definitions that are defined in the
RTE Header File.
The relationship between the RTE header file, Application Header Files, the Lifecycle
Header File and AUTOSAR software-components is illustrated in Figure 5.1.
In general a RTE can be partitioned in several files. The partitioning depends from
the RTE vendors software design and generation strategy. Nevertheless it shall be
possible to clearly identify code and header files which are part of the RTE module.
[SWS_Rte_07139] d Every file of the RTE beside Rte.h and Rte.c shall be named with
the prefix Rte_. c(SRS_BSW_00300)
The RTE header file defines fixed elements of the RTE that do not need to be generated
or configured for each ECU.
[SWS_Rte_01157] d For C/C++ AUTOSAR software-components, the name of the
RTE header file shall be Rte.h. c(SRS_BSW_00300)
Typically the contents of the RTE header file are fixed for any particular implementation
and therefore it is not created by the RTE generator. However, customization for each
generated RTE is not forbidden.
[SWS_Rte_01164] d The RTE header file shall include the file Std_Types.h. c
(SRS_Rte_00149, SRS_Rte_00150, SRS_BSW_00353)
The file Std_Types.h is the standard AUTOSAR file [31] that defines basic data types
including platform specific definitions of unsigned and signed integers and provides
access to the compiler abstraction.
The contents of the RTE header file are not restricted to standardized elements that
are defined within this document  it can also contain definitions specific to a particular
implementation.
[SWS_Rte_08309] d The RTE generator shall provide declarations for RTE and
SchM Lifecycle APIs (see Section 5.8 and 6.7) through the Lifecycle header file. c
(SRS_Rte_00051)
[SWS_Rte_01158] d For C/C++ AUTOSAR software-components, the name of the life-
cycle header file shall be Rte_Main.h. c(SRS_BSW_00300)
[SWS_Rte_01159] d The lifecycle header file shall include the RTE header file. c
(SRS_Rte_00051)
The application header file [SRS_Rte_00087] is central to the definition of the RTE API.
An application header file defines the RTE API and any associated data structures that
are required by the SW-C to use the RTE implementation. But the application header
file is not allowed to create objects in memory.
[SWS_Rte_01000] d The RTE generator shall create an application header file for each
software-component type (excluding ParameterSwComponentTypes and NvBlock-
SwComponentTypes) defined in the input. c(SRS_Rte_00087, SRS_Rte_00024,
SRS_Rte_00140)
[SWS_Rte_03786] d The application header file shall not contain code that creates
objects in memory. c(SRS_Rte_00087, SRS_BSW_00308)
RTE generation consists of two phases; an initial RTE Contract phase and a second
RTE Generation phase (see Section 2.3). Object-code components are compiled
after the first phase of RTE generation and therefore the application header file should
conform to the form of definitions defined in Sections 5.4.1 and 5.5.2. In contrast,
source-code components are compiled after the second phase of RTE generation and
therefore the RTE generator produces an optimized application header file based on
knowledge of component instantiation and deployment.
Example 5.18
should result in the application header file Rte_Source.h being generated when the
component wrapper method for bypass support is disabled.
The component type name is used rather than the component instance name for two
reasons; firstly the same component code is used for all component instances and,
secondly, the component instance name is an internal identifier, and should not appear
outside of generated code.
5.3.3.2 Scope
RTE supports two approaches for the scope of the application header file, a SW-C
based, and a runnable based approach.
  1. Always, the application header file provides only the API that is specific for one
     atomic SW-C, see [SWS_Rte_01004].
  2. The scope of the application header file can be further reduced to one runnable
     by using the mechanism described in [SWS_Rte_02751].
Many of the RTE APIs are specific to runnables. The restrictions for the usage of the
generated APIs are defined in the Existence parts of each API subsection in 5.6. To
prevent run time errors by the misuse of APIs that are not supported for a runnable, it
is recommended to use the runnable based approach of the application header file.
[SWS_Rte_01004] d The application header file for a component shall contain
only information relevant to that component. c(SRS_Rte_00087, SRS_Rte_00017,
SRS_Rte_00167)
[SWS_Rte_02751] d If the pre-compiler Symbol RTE_RUNNABLEAPI_<rn> is defined
for a runnable with short name <rn> when the application header file is included,
the application header file shall not declare APIs that are not valid to be used by the
runnable rn. c(SRS_Rte_00017)
For example, to restrict the application header file of the SW-C mySwc to the API of the
runnable myRunnable, the following sequence can be used:
   1   #define RTE_RUNNABLEAPI_myRunnable
   2   #include <Rte_mySwc.h>
   3
   4   // runnable source code
Note that this mechanism does not support to restrict the application header file to the
super set of two or more runnable APIs. In other words, runnables should be kept in
separate source files, if the runnable based approach is used.
Requirements [SWS_Rte_01004] and [SWS_Rte_02751] mean that compile time
checks ensure that a component (or runnable) that uses the application header file
only accesses the generated data structures and functions to which it has been con-
figured. Any other access, e.g. to fields not defined in the customized data structures
or RTE API, will fail with a compiler error [SRS_Rte_00017].
The definitions of the RTE API contained in the application header file can be opti-
mized during the RTE Generation phase when the mapping of software-components
to ECUs and the communication matrix is known. Consequently multiple application
header files must not be included in the same source module to avoid conflicting defi-
nitions of the RTE API definitions that the files contains.
Listing 5.1 illustrates the code structure for the declaration of the entry point of a
runnable entity that provides the implementation for a ServerPort in component c1.
The RTE generator is responsible for creating the API and tasks used to execute the
server and the symbol name of the entry point is extracted from the attribute symbol
of the runnable entity. The example shows that the first parameter of the entry point
function is the software-components instance handle [SWS_Rte_01016].
                      Listing 5.1: Skeleton server runnable entity
   1   #include <Rte_c1.h>
   2
   3   void runnable_entry(Rte_Instance instance)
   4   {
   5     /* ... server code ... */
   6   }
Listing 5.1 includes the component-specific application header file Rte_c1.h created
by the RTE generator. The RTE generator will also create the supporting data struc-
tures and the task body to which the runnable is mapped.
The RTE is also responsible for preventing conflicting concurrent accesses when the
runnable entity implementing the server operation is triggered as a result of a request
from a client received via the communication service or directly via inter-task commu-
nication.
Multiple application header file must not be included in the same module
([SWS_Rte_01004]) and therefore the file contents should contain a mechanism to
enforce this requirement.
[SWS_Rte_01006] d An application header file shall include the following mechanism
before any other definitions.
   1   #ifdef RTE_APPLICATION_HEADER_FILE
   2   #error Multiple application header files included.
   3   #endif /* RTE_APPLICATION_HEADER_FILE */
   4   #define RTE_APPLICATION_HEADER_FILE
c(SRS_Rte_00087)
[SWS_Rte_07131] d The application header file shall include the Application Types
Header File. c(SRS_Rte_00087)
The name of the Application Types Header File is defined in Section 5.3.6.
[SWS_Rte_07924] d The application header file shall include the RTE Data Handle
Types Header File (see Section 5.3.5). c(SRS_Rte_00087)
[SWS_Rte_01005] d The application header file shall be valid for both C and C++
source. c(SRS_Rte_00126, SRS_Rte_00138)
Requirement [SWS_Rte_01005] is met by ensuring that all definitions within the appli-
cation header file are defined using C linkage if a C++ compiler is used.
[SWS_Rte_03709] d All definitions within in the application header file shall be pre-
ceded by the following fragment;
   1   #ifdef __cplusplus
   2   extern "C" {
   3   #endif /* __cplusplus */
c(SRS_Rte_00126, SRS_Rte_00138)
[SWS_Rte_03710] d All definitions within the application header file shall be suffixed
by the following fragment;
   1   #ifdef __cplusplus
   2   } /* extern "C" */
   3   #endif /* __cplusplus */
c(SRS_Rte_00126, SRS_Rte_00138)
The RTE uses an instance handle to identify different instances of the same component
type. The definition of the instance handle type [SWS_Rte_01148] is unique to each
component type and therefore should be included in the application header file.
[SWS_Rte_01007] d The application header file shall define the type of the instance
handle for the component. c(SRS_Rte_00012)
All runnable entities for a component are passed the same instance handle type (as
the first formal parameter [SWS_Rte_01016]) and can therefore use the same type
definition from the components application header file.
The example 5.24 illustrates the definition of a instance handle.
The application header file also includes a prototype for each runnable entity entry
point ([SWS_Rte_01132]) and the API mapping ([SWS_Rte_01274]).
[SWS_Rte_05078] d The Application Header File shall define the init value of non-
queued VariableDataPrototypes of sender receiver or non volatile data ports and
typed by an ImplementationDataType or ApplicationDataType of category
VALUE.
   1   #define Rte_InitValue_<Port>_<DEPType> <initValue><suffix>
5.3.3.3.4 PerInstanceMemory
The Application Header File shall type definitions for PerInstanceMemorys as defined
in Chapter 5.2.5, [SWS_Rte_07133].
The application header file defines the interface between a component and the RTE.
The interface consists of the RTE API for the component and the prototypes for runn-
able entities. The definition of the RTE API requires that both relevant data structures
and API calls are defined.
The data structures required to support the API are defined in the Application Header
file (CDS) (see chapter 5.3.3), in the Application Types Header file (see chapter 5.3.6),
in the RTE Types Header file (see chapter 5.3.1) and in the RTE Data Handle Types
Header file (see chapter 5.3.5).
The data structure types are declared in the header files whereas the instances are
defined in the generated RTE. The necessary data structures for object-code software-
components are defined in chapter 5.5.2 and chapter 5.4.2.
The RTE generator is required [SWS_Rte_01004] to limit the contents of the applica-
tion header file to only that information that is relevant to that component type. This
requirement includes the definition of the API mapping. The API mapping is described
in chapter 5.2.6.
Requirement [SWS_Rte_01004] and [SWS_Rte_01006] ensure that attempts to invoke
invalid API calls will be rejected as a compile-time error [SRS_Rte_00017].
The concept of client server supports application specific error codes. Symbolic
names for Application Errors are defined in the application header file to avoid con-
flicting definitions between several AtomicSwComponentTypes mapped one ECU.
See [SWS_Rte_02575] and [SWS_Rte_02576].
The RTE Types Header File includes the RTE specific type declarations derived from
the ImplementationDataTypes created from the definitions of AUTOSAR meta-
model classes within the RTE generators input. The available meta-model classes
are defined by the AUTOSAR software-component template and include classes for
defining primitive values, structures, arrays and pointers.
The types declared in the RTE Types Header File intend to be used for the implemen-
tation of RTE internal data buffers as well as for RTE API.
[SWS_Rte_01160] d The RTE generator shall create the RTE Types Header File in-
cluding the type declarations corresponding to the ImplementationDataTypes de-
fined in the input configuration as well as the RTE implementation types. c()
The RTE Data Types header file should be output for RTE Contract and RTE Gener-
ation phases.
[SWS_Rte_02648] d The RTE Types Header File shall include the type declarations,
structure defintions, and union definitions for all the AUTOSAR Data Types according
to [SWS_Rte_07104], [SWS_Rte_07110], [SWS_Rte_06706], [SWS_Rte_06707],
[SWS_Rte_06708] [SWS_Rte_07111], [SWS_Rte_07114], [SWS_Rte_06812],
[SWS_Rte_07144], [SWS_Rte_06813], [SWS_Rte_07109] and [SWS_Rte_07148]
depending on the values of attributes typeEmitter and nativeDeclaration but
irrespective of their use by the generated RTE. c()
The attribute typeEmitter controls which part of the AUTOSAR toolchain is sup-
posed to provide data type definitions. For legacy reasons the RTE generator is sup-
posed to generate the corresponding data type if the ImplementationDataType
defines no typeEmitter.
[SWS_Rte_06709] d The RTE generator shall generate the corresponding data type
definition if the value of attribute typeEmitter is NOT defined. c()
[SWS_Rte_06710] d The RTE generator shall generate the corresponding data type
definition if the value of attribute typeEmitter is set to "RTE". c()
[SWS_Rte_06711] d The RTE generator shall reject configurations where the value
of the attribute typeEmitter is set to "RTE" and the ImplementationDataType
references a SwBaseType without defined nativeDeclaration. c()
[SWS_Rte_06712] d The RTE generator shall silently not generate the corresponding
data type definition if the value of attribute typeEmitter is set to anything else but
"RTE". c()
This requirement ensures the availability of ImplementationDataTypes for the in-
ternal use in AUTOSAR software components.
Nevertheless the RTE Types Header File does not contain any data type belonging
to an ImplementationDataType where typeEmitter is set to anything else but
"RTE" regardless if the ImplementationDataType references SwBaseTypes and if
this SwBaseTypes define nativeDeclarations.
[SWS_Rte_08732] d The RTE generator shall generate the type
Rte_Cs_TransactionHandleType of the transaction handle for inter-ECU
Client-Server communication as a structure:
typedef struct {
    uint16 clientId;
    uint16 sequenceCounter;
} Rte_Cs_TransactionHandleType;
where clientId and sequenceCounter contain the client identifier and sequence
counter as specified in [SWS_Rte_02649].
c()
The types header file may need types in terms of BSW types (from the file
Std_Types.h) or from the implementation specific RTE header file to declare types.
However, since the RTE header file includes the file Std_Types.h already so only the
RTE header file needs direct inclusion within the types header file.
[SWS_Rte_01163] d The RTE Types Header File shall include the RTE Header File. c
(SRS_BSW_00353)
The RTE Types Header File declares C types for all Primitive Implementation
Data Types where the referred BaseType has a nativeDeclaration attribute.
[SWS_Rte_07104] d For each Primitive Implementation Data Type with a
nativeDeclaration attribute, the RTE Types Header File shall include the corre-
sponding type declaration as:
typedef <nativeDeclaration> <name>;
where <nativeDeclaration> is the nativeDeclaration attribute of the re-
ferred BaseType and <name> is the Implementation Data Type symbol of the
Primitive Implementation Data Type. c(SRS_Rte_00055, SRS_Rte_00166,
SRS_Rte_00168, SRS_BSW_00353)
      MyUint8 :
                         +swDataDefProps   :SwDataDefProps   +baseType     MyUint8Base :SwBaseType
ImplementationDataType
Note: All Primitive Implementation Data Types where the referred Base-
Type has no nativeDeclaration attribute resulting not in a type declaration. This
is intended to prevent the redeclaration of the predefined Standard Types and Platform
Types.
        uint8 :
                                 +swDataDefProps    :SwDataDefProps           +baseType   uint8 :SwBaseType
ImplementationDataType
category = VALUE
In addition to the primitive data-types defined in the previous section, it is also neces-
sary for the RTE generator to declare composite data-types: arrays and records.
An array definition following information:
     the array type
     the number of dimensions
     the number of elements for each dimension.
[SWS_Rte_07110] d For each Array Implementation Data Type which leaf
ImplementationDataTypeElement is typed by a BaseType, the RTE Types
Header File shall include the corresponding type declaration as:
typedef <nativeDeclaration> <name>[<size 1>]{[<size 2>]...
[<size n>]};
where <nativeDeclaration> is the nativeDeclaration attribute of the referred
BaseType,
<name> is the Implementation Data Type symbol of the Array Implemen-
tation Data Type,
[<size x>] is the arraySize of the Arrays ImplementationDataTypeElement.
For each array dimension defined by one Arrays ImplementationDataTypeEle-
ment one array dimension definition [<size x>] is defined. The array dimension def-
initions [<size 1>], [<size 2>] ... [<size n>] ordered from the root to the
leaf ImplementationDataTypeElement. c(SRS_Rte_00055, SRS_Rte_00164)
referred ImplementationDataType are defined, the RTE Types Header File shall
include only once the corresponding type declaration according to [SWS_Rte_07111].
c(SRS_Rte_00165)
Note: This avoids the redeclaration of C types due to the multiple descriptions of equiv-
alent Array Implementation Data Types in the ECU extract.
   ArrA :ImplementationDataType                               ArrAElement :
                                          +subElement ImplementationDataTypeElement
   category = ARRAY
                                                          category = VALUE
                                                          arraySize = 5
                                             FirstDim :                               SecondDim :
       ArrArrD :
                       +subElement ImplementationDataTypeElement +subElement ImplementationDataTypeElement
ImplementationDataType
                                      category = ARRAY                          category = TYPE_REFERENCE
   category = ARRAY
                                      arraySize = 15                            arraySize = 10
                                                                       +swDataDefProps
typedef uint8 ArrArrD[15][10];
                                                                                                                               uint8 :
                                                                               :SwDataDefProps +implementationDataType ImplementationDataType
category = VALUE
ANSI C does not allow a type declaration to have zero elements and therefore we
require that the number of elements to be a positive integer.
[SWS_Rte_CONSTR_09042] Array Implementation Data Types needs at
least one element d The arraySize defining number of elements in one dimension of
an Array Implementation Data Type shall be an integer that is  1 for each dimension.
c()
Elements in the input configuration. Sequent record elements are separated with a
semicolon. c(SRS_Rte_00055, SRS_Rte_00164)
[SWS_Rte_06812] d For each Structure Implementation Data Type, the RTE
Types Header File shall include the corresponding type declaration as:
typedef struct _<name>_ <name>;
where <name> is the Implementation Data Type symbol of the Structure
Implementation Data Type. c(SRS_Rte_00055, SRS_Rte_00164)
An example is listed as ARXML and C-code in Appendix F.4.
                                               +swDataDefProps
                                                                                                                   MyUint8 :
                                                                                   +implementationDataType
    typedef struct                                                                                           ImplementationDataType
                                                       :SwDataDefProps
    {
      MyUint8 M;                                                                                                 category = VALUE
      unsigned short N;
      uint8 O;
                                  +subElement N :ImplementationDataTypeElement
    } RecA;
                                                 category = VALUE
                                              +swDataDefProps
                                                                                  +baseType       MyUint16Base :SwBaseType
                                                      :SwDataDefProps
                                                                                                nativeDeclaration = unsigned short
+subElement O :ImplementationDataTypeElement
category = TYPE_REFERENCE
                                              +swDataDefProps
                                                                                                                     uint8 :
                                                                                   +implementationDataType
                                                      :SwDataDefProps                                        ImplementationDataType
category = VALUE
                                    +swDataDefProps
                                                                                                                             MyUint8 :
                                               :SwDataDefProps                               +implementationDataType
                                                                                                                       ImplementationDataType
category = VALUE
+subElement N :ImplementationDataTypeElement
                                           category = VALUE
  typedef struct
  {
    MyUint8 M;                          +swDataDefProps
    unsigned short N;                                                                             +baseType         MyUint16Base :SwBaseType
    uint8 O;                                   :SwDataDefProps
    struct                                                                                                        nativeDeclaration = unsigned short
    {
     uint8 PA;                                                                                                                         +baseType
     unsigend short PB;                             O:
    } P;                  +subElement ImplementationDataTypeElement
  } RecA;
                                           category = TYPE_REFERENCE
                                        +swDataDefProps
                                                                                                                               uint8 :
                                                                                             +implementationDataType
                                                                                                                       ImplementationDataType
                                               :SwDataDefProps
category = VALUE
+implementationDataType
                                        P :ImplementationDataTypeElement                              PA :
                                                                           +subElement   ImplementationDataTypeElement
                                           category = STRUCTURE
                                                                                           category = TYPE_REFERENCE
                                                                                         +swDataDefProps
:SwDataDefProps
+subElement
                                                                                                      PB :
                                                                           +subElement   ImplementationDataTypeElement
category = VALUE
+swDataDefProps
:SwDataDefProps
                                     +subElement                                                        atpVariation
                                                                                                       :SwDataDefProps
                                                                                   +subElement           SecondByte :
                                                                                                 ImplementationDataTypeElement
category = VALUE
+swDataDefProps
                                                                                                        atpVariation
                                                                                                       :SwDataDefProps
+baseType +baseType
MyUint8Base :SwBaseType
                                                                                               category = STRUCTURE
           category = DATA_REFERENCE
                                                                                    +implementationDataType
[SWS_Rte_06539] d
The RTE Generator shall wrap each code related to ImplementationDataType-
Elements which are subject to variability in Structure Implementation Data
Type and Union Implementation Data Type (see 4.24 if the variability shall be
implemented.
   1   #if (<condition>)
   2
   3   <elements>
   4
   5   #endif
where <condition> are the condition value macro(s) of the VariationPoints ac-
cording table 4.24 and
<elements> is the code according invariant ImplementationDataType-
Elements (see also [SWS_Rte_07115], [SWS_Rte_07116], [SWS_Rte_07117],
[SWS_Rte_07118], [SWS_Rte_07119], [SWS_Rte_07145], [SWS_Rte_07146])
c(SRS_Rte_00201)
[SWS_Rte_06540] d The RTE Generator shall implement the <size x> of an Array
Implementation Data Type for each arraySize which is subject to variability
with the corresponding attribute value macro according table 4.24 if the variability shall
be implemented. c(SRS_Rte_00201)
Example 5.19
The Primitive Implementation Data Type in example 5.2 results in the type
definition:
   1   /* RTE Types Header File */
   2   typedef unsigned char MyUint8;
[SWS_Rte_06718] d If the RTE Types Header File contains a generated C data type
whose Implementation Data Type symbol differs from the Implementation-
DataType shortName, the Application Type Header Files of each software com-
ponent using the type shall contain a definition which redefines the Implementa-
tion Data Type symbol to the shortName of the ImplementationDataType.
c(SRS_Rte_00167)
+symbolProps :SymbolProps
symbol = MyUint8OfVendorNil
Example 5.20
The Application Types Header File an using component contain the remapping to the
original name:
   1   /* Application Types Header File */
   2   define MyUint8 MyUint8OfVendorNil;
5.3.4.11 C/C++
The RTE Data Handle Types Header File contains the Data Handle type declarations
necessary for the component data structures (see Section 5.4.2). The RTE Data
Handle Types Header File code is not allowed to create objects in memory.
[SWS_Rte_07920] d The RTE generator shall create the RTE Data Handle Types
Header File including the type declarations of
data element without status             ([SWS_Rte_01363],        [SWS_Rte_01364],
[SWS_Rte_02607]),
data element with status        ([SWS_Rte_01365],       [SWS_Rte_01366],
[SWS_Rte_03734], [SWS_Rte_02666], [SWS_Rte_02589], [SWS_Rte_02590]),
and      data element with extended status         ([SWS_Rte_06817],
[SWS_Rte_06818], [SWS_Rte_06819], [SWS_Rte_06820], [SWS_Rte_06821],
[SWS_Rte_06822], [SWS_Rte_06823], [SWS_Rte_06824], [SWS_Rte_06825],
[SWS_Rte_06826]). c()
[SWS_Rte_07921] d The RTE Data Handle Types Header File shall not contain code
that creates object in memory. c(SRS_BSW_00308)
The RTE Data Handle Types Header File should be an output of the RTE Contract
and RTE Generation phases.
[SWS_Rte_07922] d The name of the RTE Data Handle Types Header File shall be
Rte_DataHandleType.h. c(SRS_BSW_00300)
The RTE Data Handle Types Header File contains the type declarations of data el-
ement without status and data element with status (see Section 5.4.2).
[SWS_Rte_07923] d The RTE Data Handle Types Header File shall include the follow-
ing mechanism to prevent multiple inclusions.
   1    #ifndef RTE_DATA_HANDLE_TYPE_H
   2    #define RTE_DATA_HANDLE_TYPE_H
   3
   4    /* File contents */
   5
6 #endif /* RTE_DATA_HANDLE_TYPE_H */
c(SRS_Rte_00126)
The Application Types Header File provides a component local name space for enu-
meration literals and range values. The Application Types Header File is not allowed to
create objects in memory.
The Application Types Header File file should be identical output for RTE Contract
and RTE Generation phases.
[SWS_Rte_07120] d The RTE generator shall create an Application Types Header
File for each software-component type (excluding ParameterSwComponentTypes
and NvBlockSwComponentTypes) defined in the input.          c(SRS_Rte_00024,
SRS_Rte_00140, SRS_BSW_00447)
[SWS_Rte_07121] d The Application Types Header File shall not contain code that
creates objects in memory. c(SRS_BSW_00308)
[SWS_Rte_07122] d The name of the Application Types Header File shall be formed
by prefixing the AUTOSAR software-component type name with Rte_[Byps_] and
appending the result with _Type.h. [Byps_] is an optionnal infix used when compo-
nent wrapper method for bypass support is enabled for the related software component
type (See chapter 4.9.2). c(SRS_BSW_00300, SRS_Rte_00167)
Example 5.21
should result in the Application Types Header File Rte_Source_Type.h being gen-
erated when the component wrapper method for bypass support is disabled.
5.3.6.2 Scope
[SWS_Rte_07123] d The Application Types Header File for a component shall contain
only information relevant for that component. c(SRS_Rte_00167, SRS_Rte_00017)
[SWS_Rte_07124] d The Application Types Header File shall be valid for both C and
C++ source. c(SRS_Rte_00126, SRS_Rte_00138)
Requirement [SWS_Rte_07124] is met by ensuring that all definitions within the Appli-
cation Types Header File are defined using C linkage if a C++ compiler is used.
[SWS_Rte_07125] d All definitions within in the Application Types Header File shall be
preceded by the following fragment;
   1    #ifdef __cplusplus
   2    extern "C" {
   3    #endif /* __cplusplus */
c(SRS_Rte_00126, SRS_Rte_00138)
[SWS_Rte_07126] d All definitions within the application types header file shall be
suffixed by the following fragment;
   1    #ifdef __cplusplus
   2    } /* extern "C" */
   3    #endif /* __cplusplus */
c(SRS_Rte_00126, SRS_Rte_00138)
[SWS_Rte_07678] d The Application Types Header File shall be protected against
multiple inclusions:
   1    #ifndef RTE_<SWC>_TYPE_H
   2    #define RTE_<SWC>_TYPE_H
   3    ...
   4    /*
   5     * Contents of file
   6     */
   7    ...
   8    #endif /* !RTE_<SWC>_TYPE_H */
In contrast to the Application Header File the Application Types Header File supports
that multiple Application Types Header Files are included in the same module. This is
necessary if for instance a BSW module uses several AUTOSAR Services.
[SWS_Rte_07127] d The Application Types Header File shall include the RTE Types
Header File. c(SRS_Rte_00087)
The name of the RTE Types Header File is defined in Section 5.3.4.
The Application Types Header File shall contain identifiers for the ModeDeclarations
and type definitions for ModeDeclarationGroups as defined in Chapter 5.5.4
The Application Types Header File shall contain the enumeration constants as defined
in Chapter 5.5.5
The Application Types Header File shall contain definitions of Range constants as
defined in Chapter 5.5.6
The Application Type Header File may contain definitions to redefine the Imple-
mentation Data Type symbol to the shortName of the Implementation-
DataType in order to provide the expected type name to the software component
implementation. See section 5.3.4.10.
The VFB Tracing Header File defines the configured VFB Trace events.
[SWS_Rte_01319] d The VFB Tracing Header File shall be created by the RTE Gen-
erator during RTE Generation Phase or Basic Software Scheduler Generation Phase
only. c(SRS_Rte_00045)
The VFB Tracing Header file is included by the generated RTE and by the user in the
module(s) that define the configured hook functions. The header file includes proto-
types for the configured functions to ensure consistency between the invocation by the
RTE and the definition by the user.
5.3.7.1 C/C++
[SWS_Rte_01251] d The VFB Tracing header file shall include the RTE Configuration
Header File (Section 5.3.8). c(SRS_Rte_00045)
[SWS_Rte_01357] d The VFB Tracing header file shall include the RTE Types Header
file (Section 5.3.4). c(SRS_Rte_00003, SRS_Rte_00004)
[SWS_Rte_03607] d The VFB Tracing header file shall include Os.h.                   c
(SRS_Rte_00005, SRS_Rte_00008)
[SWS_Rte_01320] d The VFB Tracing header file shall contain the following code im-
mediately after the include of the RTE Configuration Header File.
   1   #ifndef RTE_VFB_TRACE
   2   #define RTE_VFB_TRACE (FALSE)
   3   #endif /* RTE_VFB_TRACE */
c(SRS_Rte_00008, SRS_Rte_00005)
Requirement [SWS_Rte_01320] enables VFB tracing to be globally enabled/disabled
within the RTE Configuration Header File and ensures that it defaults to disabled.
[SWS_Rte_01236] d For each trace event hook function defined in Section 5.11.5, the
RTE generator shall define the following code sequence in the VFB Tracing header file:
   1   #if defined(<trace event>) && (RTE_VFB_TRACE == FALSE)
   2   #undef <trace event>
   3   #endif
   4   #if defined(<trace event>)
   5   #undef <trace event>
   6   extern void <trace event>(<params>);
   7   #else
   8   #define <trace event>(<params>) ((void)(0))
   9   #endif /* <trace event> */
where <trace event> is the name of trace event hook function and <params> is
the list of parameter names of the trace event hook function prototype as defined in
Section 5.11.5. c(SRS_Rte_00008)
The code fragment within [SWS_Rte_01236] benefits from a brief analysis of its struc-
ture. The first #if block ensures that an individually configured trace event in the RTE
Configuration Header File [SWS_Rte_01324] is disabled if tracing is globally disabled
[SWS_Rte_01323]. The second #if block emits the prototype for the hook function
only if enabled in the RTE Configuration file and thus ensures that only configured trace
events are prototyped. The #undef is required to ensure that the trace event function
is invoked as a function by the generated RTE. The #else block comes into effect if the
trace event is disabled, either individually [SWS_Rte_01325] or globally, and ensures
that it has no run-time effect. Within the #else block the definition to ((void)(0))
enables the hook function to be used within the API Mapping in a comma-expression.
An individual trace event defined in Section 5.11.5 actually defines a class of hook
functions. A member of the class is created for each RTE object created (e.g. for each
API function, for each task) and therefore an individual trace event may give rise to
many hook function definitions in the VFB Tracing header file.
Example 5.22
Consider an API call Rte_Write_p1_a for an instance of SW-C c. This will result in
two trace event hook functions being created by the RTE generator:
   1    Rte_WriteHook_c_p1_a_Start
and
   1    Rte_WriteHook_c_p1_a_Return
The RTE Configuration Header File contains user definitions that affect the behavior of
the generated RTE.
The directory containing the required RTE Configuration Header File should be in-
cluded in the compilers include path when using the VFB tracing header file. The RTE
Configuration Header File is generated by the RTE generator.
5.3.8.1 C/C++
[SWS_Rte_07641] d The RTE Configuration Header File shall include the file
Std_Types.h. c(SRS_Rte_00149, SRS_Rte_00150, SRS_BSW_00353)
[SWS_Rte_01322] d The RTE generator shall globally enable VFB tracing when
RTE_VFB_TRACE is defined in the RTE Configuration Header File as a vale which
does not evaluate as FALSE. c(SRS_Rte_00008, SRS_Rte_00005)
Note that, as observed in Section 5.11, VFB tracing enables debugging of software
components, not the RTE itself.
[SWS_Rte_01323] d The RTE generator shall globally disable VFB tracing when
RTE_VFB_TRACE is defined in the RTE configuration header file as FALSE. c
(SRS_Rte_00008, SRS_Rte_00005)
As well as globally enabling or disabling VFB tracing, the RTE Configuration header
file also configures those individual VFB tracing events that are enabled.
[SWS_Rte_01324] d The RTE generator shall enable VFB tracing for a given hook
function when there is a #define in the RTE Configuration Header File for the hook
function name and tracing is globally enabled. c(SRS_Rte_00008)
Note that the particular value assigned by the #define, if any, is not significant.
[SWS_Rte_01325] d The RTE generator shall disable VFB tracing for a given hook
function when there is no #define in the RTE Configuration Header File for the hook
function name even if tracing is globally enabled. c(SRS_Rte_00008)
Example 5.23
Consider the trace events from Example 5.22. The trace event for API start is enabled
by the following definition;
   1   #define Rte_WriteHook_i1_p1_a_Start
And the trace event for API termination is enabled by the following definition;
   1   #define Rte_WriteHook_i1_p1_a_Return
The Condition Value Macros are generated in the PreBuild Data Set Contract Phase
and PreBuild Data Set Generation Phase. To do this a particular variant out of the
pre-build variability of the input configuration has to be chosen by the means
described in by [SWS_Rte_06500].
Where
<bsnp> is the BSW Scheduler Name Prefix according [SWS_Rte_07593] and
[SWS_Rte_07594],
<vi> is the vendorId of the BSW module,
<ai> is the vendorApiInfix of the BSW module,
<ki> is the kind infix according table 4.28,
<name> is the short name of the element which is subject to variability in table 4.28
defining the Basic Software Scheduler API name infix and
<value> is the evaluated value of the AttributeValueVariationPoint or Con-
ditionByFormula.
The sub part in squared brackets [_<vi>_<ai>] is omitted if no vendorApiInfix
is defined for the Basic Software Module. See [SWS_Rte_07528]. c(SRS_Rte_00229,
SRS_BSW_00347)
This requirement makes the SwSystemconst value available to resolve the pre-
build variability in the BSW module via the Preprocessor. This might be used
to
    read the actual value of the value assigned to a SwSystemconst
    read the setting of an attribute (e.g. array size) dependent from a SwSystem-
     const
    check the existence of a conditional existent object, e.g. a code fragment imple-
     menting a particular functionality
[SWS_Rte_06518] d For each RTE API which is subject to variability and following the
form component internal in table 4.17 the RTE Configuration Header File shall contain
one definition of a Condition Value
#define Rte_VPCon_<cts>_<ki>_<name>_<sl> <value>
[SWS_Rte_06535] d For each Basic Software Scheduler API which is subject to vari-
ability and following the form module internal in table 4.28 the RTE Configuration
Header File shall contain one definition of a Condition Value
#define SchM_VPCon_<bsnp>[_<vi>_<ai>]_<ki>_<name>_<sl> <value>
where here
<bsnp> is the BSW Scheduler Name Prefix according [SWS_Rte_07593] and
[SWS_Rte_07594],
<vi> is the vendorId of the BSW module,
<ai> is the vendorApiInfix of the BSW module,
<ki> is the kind infix according table 4.28,
<name> is the short name of the element which is subject to variability in table 4.28
defining the Basic Software Scheduler API name infix and
<sl> is the shortLabel of the elements VariationPoint defining the API name
infix.
<value> is the evaluated value of the ConditionByFormula of the Variation-
Point defining the variant existence of the Basic Software Scheduler API in table
4.28.
The sub part in squared brackets [_<vi>_<ai>] is omitted if no vendorApiInfix
is defined for the Basic Software Module. See [SWS_Rte_07528]. c(SRS_Rte_00229,
SRS_BSW_00347)
[SWS_Rte_06536] d For each Basic Software Scheduler API which is subject to vari-
ability and which variability shall be implemented and which is following the form mod-
ule external and entity internal in table 4.28 the RTE Configuration Header File shall
contain one definition of a Condition Value
#define SchM_VPCon_<bsnp>[_<vi>_<ai>]_<ki>_
                      <entity>[_<esl>]_<name>[_<sl>] <value>
where here
<bsnp> is the BSW Scheduler Name Prefix according [SWS_Rte_07593] and
[SWS_Rte_07594],
<vi> is the vendorId of the BSW module,
<ai> is the vendorApiInfix of the BSW module,
<ki> is the kind infix according table 4.28,
entity is the shortName of the BswModuleEntity
<esl> is the shortLabel of the BswModuleEntitys VariationPoint containing
the subject to variability,
where here
<bsnp> is the BSW Scheduler Name Prefix according [SWS_Rte_07593] and
[SWS_Rte_07594],
<vi> is the vendorId of the BSW module,
<ai> is the vendorApiInfix of the BSW module,
<entry> is the shortName of the implemented (implementedEntry) entry point
and
<esl> is the shortLabel of the BswModuleEntitys VariationPoint
<value> is the evaluated value of the ConditionByFormula of the Variation-
Point defining the variant existence of the BswSchedulableEntity in table 4.30.
The sub part in squared brackets [_<vi>_<ai>] is omitted if no vendorApiInfix
is defined for the Basic Software Module. See [SWS_Rte_07528]. c(SRS_Rte_00229,
SRS_BSW_00347)
An example about the usage of condition value macros is shown in 5.6.
Figure 5.1 defines the relationship between generated and standardized header files.
It is not necessary to standardize the relationship between the C module, Rte.c,
and the header files since when the RTE is generated the application header files are
created anew along with the RTE. This means that details of which header files are
included by Rte.c can be left as an implementation detail.
In the example in Figure 5.12, the generated RTE C module requires access to the data
structures created for each AUTOSAR software-component and therefore includes
each application header file4 . In the example, the generated RTE also includes the
RTE header file and the lifecycle header file in order to obtain access to RTE and
lifecycle related definitions.
Note: Inclusion of Application Header Files of different software components into the
RTE C module needs support in the Application Header Files in order to avoid that
some local definitions of software components are producing name clashes. If the
RTE C module does not include any Application Header File, some type definitions
(e.g. component data structure) might have to be generated twice.
5.3.9.2 C/C++
[SWS_Rte_02711] d On a multi core ECU, RTE shall only use global and static vari-
ables in the Rte.c module, if it is used in a single image system that supports shared
memory. In this case, RTE shall guarantee consistency of this memory, e.g. by using
OS mechanisms. c()
[SWS_Rte_02712] d On a multi partition ECU, there shall be additional code and
header files named Rte_Partition_<PartitionName> for the core specific code
parts of RTE where <PartitionName> is the shortName of the container Ecuc-
Partition. c()
[SWS_Rte_02713] d There shall not be symbol redefinitions between different
Rte_Partition_<PartitionName> files. c()
These requirements makes sure, that all Rte modules can be linked in one image. On
a multi core ECU, the RTE may be linked in one image or distributed over separate
images, one per core.
An RTE that includes configured code from an object-code or source-code library may
use additional modules. Further on due to the encapsulation of a component local
name space [SRS_Rte_00167], it might be required to encapsulate part of the gener-
ated RTE code in component specific files as well to avoid name clashes in the RTEs
implementation.
[SWS_Rte_07140] d The RTE generator is allowed                     to    partition the
generated RTE module in several files additionally                  to   Rte.c and
Rte_Partition_<PartitionName>. c(SRS_Rte_00167)
By its very nature the contents of the generated RTE is largely vendor specific. It is
therefore only possible to define those common aspects that are visible to the outside
world such as the names of generated APIs and the definition of component data
structures that apply any operating mode.
The Component Data Structure (Section 5.4.2) is a per-component data type used to
define instance specific information required by the generated RTE.
[SWS_Rte_03711] d The generated RTE shall contain an instance of the relevant Com-
ponent Data Structure for each software-component instance on the ECU for which the
RTE is generated. c(SRS_Rte_00011)
[SWS_Rte_03712] d The name of a Component Data Structure instantiated by the
RTE generator shall be Rte_Instance_<name> where <name> is an automatically
generated name, created in some manner such that all instance data structure names
are unique. The name of a Component Data Structure instantiated by the RTE gener-
[SWS_Rte_01266] d The RTE module shall define the generated functions that will
be invoked when an AUTOSAR software-component makes an RTE API call. c
(SRS_Rte_00051)
The semantics of the generated functions are not defined (since these will obviously
vary depending on the RTE API call that it is implementing) nor are the implementation
details (which are vendor specific). However, the names of the generated functions
defined in Section 5.2.6.1.
The signature of a generated function is the same as the signature of the relevant RTE
API call (see Section 5.6) with the exception that the instance handle can be omitted
since the generated function is applicable to a specific software-component instance.
5.3.9.3.3 Callbacks
In addition to the generated functions for the RTE API, the RTE module includes call-
backs invoked by COM when signal events (receptions, transmission acknowledge-
ment, etc.) occur.
[SWS_Rte_01264] d The RTE module shall define COM callbacks for relevant signals.
c(SRS_Rte_00019)
The required callbacks are defined in Section 5.9.
[SWS_Rte_03795] d The RTE generator shall generate a separate header file contain-
ing the prototypes of callback functions. c(SRS_Rte_00019)
[SWS_Rte_03796] d The name of the header file containing the callback prototypes
shall be Rte_Cbk.h in a C/C++ environment. c(SRS_Rte_00019)
[SWS_Rte_03796] refers to the callbacks defined in section 5.9.
The RTE module define task bodies for tasks created by the RTE generator only in
compatibility mode.
[SWS_Rte_01277] d In compatibility mode [SWS_Rte_01257], the RTE module shall
define all task bodies created by the RTE generator. c(SRS_Rte_00145)
Note that in vendor mode it is assumed that greater knowledge of the OS is available
and therefore the above requirement does not apply so that specific optimizations,
such as creating each task in a separate module, can be applied.
[SWS_Rte_01197] d The RTE module shall define the RTE lifecycle API. c
(SRS_Rte_00051)
The RTE lifecycle API is defined in Section 5.8.
5.3.9.4 Reentrancy
All code invoked by generated RTE code that can be subject to concurrent execution
must be reentrant. This requirement for reentrancy can be overridden if the gener-
ated code is not subject to concurrent execution, for example, if protected by a data
consistency mechanism to ensure that access to critical regions is call serialized.
[SWS_Rte_06620] d The RTE generator shall generate in the Rte_PBcfg.h file the
SchM_ConfigType type declaration of the predefined post build variants data struc-
ture. This header file must be used by other RTE modules to resolve their runtime
variabilities. c(SRS_Rte_00201)
[SWS_Rte_06638] d The RTE generator must generate a Rte_PBcfg.c file containing
the declarations and initializations of one or more RTE post build variants. Only one of
these variants can be active at runtime. c(SRS_Rte_00201, SRS_BSW_00346)
Within an RTE with post build variants, one active RtePostBuildVariantConfig-
uration will exist. It is a pointer to this structure that shall be passed to SchM_Init.
Also note that the container PredefinedVariant is only a Meta Model construct to
allow the designer to create a validated collection of values assigned to a criterion. It
is up to the implementer of the RTE generator to optimize variant configurations either
for size and/or performance by using different levels of indirection to the PostBuild-
VariantCriterionValues. For the least amount of indirection for example one can
have the criterion values at the level of the Sch_ConfigType. If you use post build
loadable then you may want to reduce memory storage by reusing variant sets if they
remain unchanged across two or more predefined variants.
The following subsections provide examples for the SchM_ConfigType declaration
and instantiation only for demonstration purposes. No requirement what so ever is
implied.
RtePostBuildVariantConfiguration is a multipleConfigurationCon-
tainer and the RtePostBuildUsedPredefinedVariant reference within the
container is PostBuild configurable. This is required to permit that RtePostBuil-
dUsedPredefinedVariant parameters in different RtePostBuildVariantCon-
figuration containers can refer to different PredefinedVariants. Nevertheless
this PostBuild references result in the generation of different PostBuild Data Sets
whereas the RtePostBuildUsedPredefinedVariant reference itself is not actu-
ally post build configurable inside the RTE.
An example of a flat data structure to represent the criterion values defined in the
Rte_PBcfg.h file containing theSchM_ConfigType type which can contain the list of
unique PostBuildVariantCriterion members. This approach immediately en-
forces that only one single criterion assignment can exist. The member names can,
for example, follow the template defined below where <sn> is the PostBuildVari-
antCriterion shortName.
   1   struct SchM_ConfigType {
   2     /* The PostBuildVariantCriterion shortname */
   3       int VarCri_<sn>;
   4       .
   5       .
   6       .
   7   };
An example showing an additional level of indirection and as such allows for reuse of
variant sets to optimize memory storage acorss for example several predefined vari-
ants is shown below. The RTE generator in this case can reuse some PostBuild-
VariantCriterionValueSets to reduce the memory resource consumption of an
ECU. The RTE generator can declare in the Rte_PBcfg.h file a structure type for each
distinct unique collection of PostBuildVariantCriterionValueSets containing
the PostBuildVariantCriterions as members. This implies that if two Prede-
finedVariants are defined each referring to a named PostBuildVariantCri-
terionValueSet and the list of PostBuildVariantCriterions in each of these
PostBuildVariantCriterionValueSets is identical that only one type is defined
for these two named PostBuildVariantCriterionValueSets. The name of the
type can, for example, follow the pattern below where the <id> is a unique identifier
for that type (e.g. a counter).
   1   struct Rte_VarSet_<id>_t {
   2     /* The PostBuildVariantCriterion shortname */
   3       int VarCri_<sn>;
   4       .
   5       .
   6       .
   7   };
Now the SchM_ConfigType type can be declared with pointers to these variant sets.
The member names of this struct can, for example, follow the template below where
<id> is a unique identifier.
   1   struct SchM_ConfigType {
   2      /* The PostBuildVariantCriterion shortname */
   3        Rte_VarSet_<id>_t* VarSet_<id>_Ptr;
   4        .
   5        .
   6        .
   7   };
In correlation with example 1 of the header file the RTE generator can declare and op-
tionally initialize a default variant configuration named Rte_VarCfg in the Rte_PBcfg.c
file of the SchM_ConfigType type.
For example (the initializers are the criterion values):
   1   const struct SchM_ConfigType Rte_VarCfg = {1,2,3,4,5};
And likewise for the example 2 header file the RTE generator can declare and initial-
ize in the Rte_PBcfg.c file all possible PostBuildVariantCriterionValueSets
and the RtePostBuildVariantConfigurations using references to these variant
sets.
For example:
   1   const struct Rte_VarSet_1_t Rte_VarSet_1a = {1,2,3};
   2   const struct Rte_VarSet_1_t Rte_VarSet_1b = {1,4,1};
   3   const struct Rte_VarSet_2_t Rte_VarSet_2 = {2,5,7,3,2};
   4   .
   5   .
   6   .
Another type of optimization strategy (besides flattening) that can be applied is double
buffering for frequently used variant criterion values. The additional buffer can then be
used in the conditions to optimize the performance of the RTE, e.g.
    1   BufferedVarCri_1 = Rte_VarCfgPtr->VarSet_1->VarCri_1;
The use of standardized data structures imposes tight constraints on the RTE imple-
mentation and therefore restricts the freedom of RTE vendors to optimize the solution
of object-code components but has the advantage that RTE generators from different
vendors can be used to compile an object-code software-component and to generate
the RTE. No such restrictions apply for the vendor mode. If an RTE generator operating
in vendor mode is used for an object-code component in both phases, vendor-specific
optimizations can be used.
Note that with the exception of data structures required for support object-code soft-
ware components in compatibility mode, the data structures used for RTE Generation
phase are not defined. This permits vendor specific API mappings and data structures
to be used for a generated RTE without loss of portability.
The following definitions only apply to RTE generators operating in compatibility mode 
in this mode the instance handle and the component data structure have to be defined
even for those (object-code) software components for which multiple instantiation is
forbidden to ensure compatibility.
[SWS_Rte_01013] d For the RTE C/C++ API, any call that can operate on differ-
ent instances of a component that supports multiple instantiation supportsMulti-
pleInstantiation shall have an instance handle as the first formal parameter. c
(SRS_Rte_00011)
[SWS_Rte_03806] d If a component does not support multiple instantiation, the in-
stance handle parameter shall be omitted in the RTE C/C++ API and in the signature
of the RTE Hook functions. c(SRS_Rte_00011)
If the component does not support multiple instantiation, the instance handle is not
passed to the API calls and runnable entities as parameters. In order to support access
to the component data structure the name of the CDS is specified.
[SWS_Rte_03793] d If a software component does not support multiple instantia-
tion, the name of the component data instance shall be Rte_Inst_<cts>, where
<cts> is the component type symbol of the AtomicSwComponentType. c
(SRS_Rte_00011)
The data type of the instance handle is defined in Section 5.5.2.
Example 5.24
   1   // --------------------------------------
   2   // Application header file
   3   // --------------------------------------
   4
   5   // ComponentDataStructure declaration
   6   // [SWS_Rte_07132],[SWS_Rte_03714],[SWS_Rte_03733]
   7   struct Rte_CDS_c
   8   {
   9       Rte_DE_uint8* re1_p_a;
  10       Rte_DES_uint8* re2_p_a;
  11       ...
  12   };
  13
  14   // Instance handle type
  15   // [SWS_Rte_01007], [SWS_Rte_01148],[SWS_Rte_01150],[SWS_Rte_06810]
  16   typedef CONSTP2CONST(struct Rte_CDS_c, AUTOMATIC, RTE_CONST)
          Rte_Instance;
  17
  18   // Instance handle declaration for swc without multiple instantiation
  19   // [SWS_Rte_03793]
  20   #define RTE_START_SEC_CONST_UNSPECIFIED
  21   #include "Rte_MemMap.h"
  22   extern CONSTP2CONST(struct Rte_CDS_c, RTE_CONST, RTE_CONST) Rte_Inst_c;
  23   #define RTE_STOP_SEC_CONST_UNSPECIFIED
  24   #include "Rte_MemMap.h"
  25
  26   //Api
  27   #define Rte_IWrite_re1_p_a(v) ((Rte_Inst_c)->re1_p_a->value = (v))
  28   #define Rte_IRead_re2_p_a() ((Rte_Inst_c)->re2_p_a->value)
  29   #define Rte_IStatus_re2_p_a() ((Rte_Inst_c)->re2_p_a->status)
  30
  31   // -----------------------------------
  32    // Rte.c file
  33    // -----------------------------------
  34
  35    // ComponentDataStructure definition
  36    // [SWS_Rte_03711],[SWS_Rte_03712],[SWS_Rte_03715]
  37    const struct Rte_CDS_c Rte_Instance_c1 =
  38    {
  39        ...
  40    };
  41
  42    // Instance handle definition for swc without multiple instantiation
  43    // [SWS_Rte_03793]
  44    #define RTE_START_SEC_CONST_UNSPECIFIED
  45    #include "Rte_MemMap.h"
  46    CONSTP2CONST(struct Rte_CDS_c, RTE_CONST, RTE_CONST) Rte_Inst_c = &
           Rte_Instance_c1;
  47    #define RTE_STOP_SEC_CONST_UNSPECIFIED
  48    #include "Rte_MemMap.h"
Different component instances share many common features - not least of which is
support for shared code. However, each instance is required to invoke different RTE
API functions and therefore the instance handle is used to access the component data
structure that defines all instance specific data.
It is necessary to define the component data structure to ensure compatibility between
the two RTE phases when operating in compatibility mode  for example, a clever
compiler and linker may encode type information into a pointer type to ensure type-
safety. In addition, the structure definition cannot be empty since this is an error in
ANSI C.
[SWS_Rte_07132] d The component data structure type shall be defined in the Appli-
cation Header file. c(SRS_Rte_00011, SRS_Rte_00167)
[SWS_Rte_03714] d The type name of the component data structure shall be
Rte_[Byps]_CDS_<cts> where <cts> is the component type symbol of the
AtomicSwComponentType. [Byps_] is an optional infix used when component
wrapper method for bypass support is enabled for the related software component
type (See chapter 4.9.2). c(SRS_BSW_00305)
The members of the component data structure include function pointers. It is important
that such members are not subject to run-time modification and therefore the compo-
nent data structure is required to be placed in read-only memory.
[SWS_Rte_03715] d All instances of the component data structure shall be defined as
const (i.e. placed in read-only memory). c(SRS_BSW_00007)
The elements of the component data structure are sorted into sections, each of which
defines a logically related section. The sections defined within the component data
structure are:
    [SWS_Rte_03718]         d     Data   Handles     section.         c(SRS_Rte_00011,
     SRS_Rte_00051)
    [SWS_Rte_03719] d Per-instance Memory Handles section. c(SRS_Rte_00011,
     SRS_Rte_00051)
    [SWS_Rte_01349] d Inter-runnable               Variable     Handles   section.     c
     (SRS_Rte_00011, SRS_Rte_00051)
    [SWS_Rte_03720] d Calibration Parameter Handles section. c(SRS_Rte_00011,
     SRS_Rte_00051)
    [SWS_Rte_03721] d Exclusive-area API section.                     c(SRS_Rte_00011,
     SRS_Rte_00051)
    [SWS_Rte_03716] d Port API section. c(SRS_Rte_00011, SRS_Rte_00051)
    [SWS_Rte_03717] d Inter Runnable Variable API section. c(SRS_Rte_00011,
     SRS_Rte_00051)
    [SWS_Rte_07225] d Inter Runnable Triggering API section. c(SRS_Rte_00011,
     SRS_Rte_00051)
    [SWS_Rte_07837] d Instance Id section. c(SRS_Rte_00011, SRS_Rte_00051,
     SRS_Rte_00244)
    [SWS_Rte_08091] d RAM Block Data Updated Handles section.                          c
     (SRS_Rte_00011, SRS_Rte_00051, SRS_Rte_00245)
    [SWS_Rte_03722] d Vendor specific section. c(SRS_Rte_00011)
The order of elements within each section of the component data structure is defined
as follows;
[SWS_Rte_03723] d Section entries shall be sorted alphabetically (ASCII / ISO 8859-1
code in ascending order) unless stated otherwise. c(SRS_Rte_00051)
The sorting of entries is applied to each section in turn.
Note that there is no prefix associated with the name of each entry within a section;
the component data structure as a whole has the prefix and therefore there is no need
for each member to have the same prefix.
ANSI C does not permit empty structure definitions yet an instance handle is required
for the RTE to function. Therefore if there are no API calls then a single dummy entry
is defined for the RTE.
[SWS_Rte_03724] d If all sections of the Component Data Structure are empty
the Component Data Structure shall contain a uint8 with name Rte_Dummy. c
(SRS_Rte_00126)
The data handles section is required to support the Rte_IRead and Rte_IWrite
calls (see Section 5.2.4).
[SWS_Rte_03733] d Data Handles shall be named <re>_<p>_<o> where <re> is the
runnable entity name that reads (or writes) the data item, <p> the port name, <o> the
data element. c(SRS_BSW_00305, SRS_Rte_00051)
A RunnableEntity can read and write to the same port/data element in case of a
PRPortPrototypes where as PPortPrototypes and RPortPrototypes are in-
herently uni-directional (a provide port can only be written, a require port can only be
read). Please note that for read and write access of a runnable to data in a PRPort-
Prototype only one data handle exist.
[SWS_Rte_06827] d The Data Handle shall be a pointer to a data element with
extended status if and only if the runnable has write access via a PRPortPro-
totype and acknowledgement is enabled for this data element. c(SRS_Rte_00051,
SRS_Rte_00185)
[SWS_Rte_02608] d The Data Handle shall be a pointer to a data element with
status if and only if either
    the runnable has read access (via a RPortPrototype or PRPortPrototype)
     and either
           data element outdated notification or
           data element invalidation or
           data element never received status or
           data element range check or
           handleDataStatus
       is activated for this data element, or
    the runnable has write access via a PPortPrototype and acknowledgement is
     enabled for this data element.
c(SRS_Rte_00051, SRS_Rte_00185)
[SWS_Rte_02588] d Otherwise, the data type for a Data Handle shall be a pointer to
a data element without status. c(SRS_Rte_00051)
See below for the definitions of these terms.
[SWS_Rte_06529] d The RTE Generator shall wrap each entry of Data Handles Sec-
tion in the component data structure of a variant existent Rte_IRead or Rte_IWrite
API if the variability shall be implemented.
   1   #if (<condition>)
   2
   3   <Data Handles Section Entry>
   4
   5   #endif
where condition is the condition value macro of the VariationPoint relevant for
the variant existence of the Rte_IRead or Rte_IWrite API (see [SWS_Rte_06515]),
Data Handles Section Entry is the code according an invariant Data Handles
Section Entry (see also [SWS_Rte_03733], [SWS_Rte_02608], [SWS_Rte_02588]) c
(SRS_Rte_00201)
[SWS_Rte_08777] d If the software component does not support multiple instantiation,
the data handles section shall be empty. c(SRS_Rte_00051)
[SWS_Rte_01363] d The data type for a data element without status shall be named
Rte_DE_<dt> where <dt> is the data elements ImplementationDataType name.
c(SRS_Rte_00051)
[SWS_Rte_01364] d A data element without status shall be a structure con-
taining a single member named value. c(SRS_Rte_00051)
[SWS_Rte_02607] d The value member of a data element without status
shall have the same data type as the corresponding data element. c(SRS_Rte_00051,
SRS_Rte_00147, SRS_Rte_00078)
Note that requirements [SWS_Rte_01364] and [SWS_Rte_02607] together imply that
creating a variable of data type Rte_DE_<dt> allocates enough memory to store the
data copy.
[SWS_Rte_01365] d The data type for a data element with status shall be named
Rte_DES_<dt> where <dt> is the data elements ImplementationDataType
name. c(SRS_Rte_00051)
[SWS_Rte_01366] d A data element with status shall be a structure containing
exactly two members. c(SRS_Rte_00051)
[SWS_Rte_03734] d The first member of each data element with status shall
be named value c(SRS_Rte_00051)
[SWS_Rte_02666] d The value member of a data element with status
shall have the type of the corresponding data element. c(SRS_Rte_00051,
SRS_Rte_00147, SRS_Rte_00078, SRS_Rte_00185)
[SWS_Rte_02589] d The second member of each data element with status
shall be named status. c(SRS_Rte_00051, SRS_Rte_00147, SRS_Rte_00078,
SRS_Rte_00185)
[SWS_Rte_06817] d The data type for a data element with extended status
 (applies only for PRPortPrototypes) shall be named Rte_DEX_<dt> where <dt>
is the data elements ImplementationDataType name. c(SRS_Rte_00051)
[SWS_Rte_06818] d A data element with extended status shall be a struc-
ture containing exactly three members. c(SRS_Rte_00051)
[SWS_Rte_06819] d The first member of each data element with extended
status shall be named value. c(SRS_Rte_00051)
[SWS_Rte_06820] d The value member of a data element with extended
status shall have the type of the corresponding data element. c(SRS_Rte_00051,
SRS_Rte_00147, SRS_Rte_00078, SRS_Rte_00185)
[SWS_Rte_06821] d The second member of each data element with ex-
tended status shall be named status. c(SRS_Rte_00051, SRS_Rte_00147,
SRS_Rte_00078, SRS_Rte_00185)
[SWS_Rte_06822] d The status member of a data element with extended
status shall be of the Std_ReturnType type. c(SRS_Rte_00147, SRS_Rte_00078,
SRS_Rte_00185)
[SWS_Rte_06823] d The third member of each data element with ex-
tended status shall be named feedback. c(SRS_Rte_00051, SRS_Rte_00147,
SRS_Rte_00078, SRS_Rte_00185)
[SWS_Rte_06824] d The feedback member of a data element with extended
status shall be of the Std_ReturnType type. c(SRS_Rte_00147, SRS_Rte_00078,
SRS_Rte_00185)
[SWS_Rte_06825] d In case of read access, the status member of a data element
with extended status shall contain the error status corresponding to the value
member. c(SRS_Rte_00147, SRS_Rte_00078)
5.4.2.1.4 Usage
A definition for every required data element with status, every data element
without status, and every data element with extended status is emitted
in the RTE Data Handle Types Header File (see Section 5.3.5).
Example 5.25
   5   typedef struct {
   6     uint8 value;
   7     Std_ReturnType status;
   8   } Rte_DES_uint8;
The values assigned to data handles within instances of the component data structure
created within the generated RTE depend on the mapping of tasks and runnables 
See Section 5.2.4.
The Per-instance Memory Section Handles section enables to access instance specific
memory (sections).
[SWS_Rte_02301] d The CDS shall contain a handle for each Per-instance Memory.
This handle member shall be named Pim_<name> where <name> is the per-instance
memory name. c(SRS_BSW_00305, SRS_Rte_00051, SRS_Rte_00013)
The Per-instance Memory Handles are typed; [SWS_Rte_02302] d The data type
of each Per-instance Memory Handle shall be a pointer to the type of the per in-
stance memory that is defined in the Application Header file. c(SRS_Rte_00051,
SRS_Rte_00013)
The RTE supports the access to the per-instance memories by the Rte_Pim API.
[SWS_Rte_06527] d The RTE Generator shall wrap each entry of Per-instance Mem-
ory Handles Section in the component data structure of a variant existent PerIn-
stanceMemory or arTypedPerInstanceMemory if the variability shall be imple-
mented.
   1   #if (<condition>)
   2
   3   <Per-instance Memory Handles Section Entry>
   4
5 #endif
Example 5.26
and in Rte.c:
   1   Rte_PimType_c_MyMemType mem1;
   2
   3   const struct Rte_CDS_c Rte_Instance_c1 = {
   4     ...
   5     /* per-instance memory handle section */
   6     /* Rte_PimType_c_MyMemType Pim_mem */
   7     &mem1
   8     ...
   9   };
Each runnable may require separate handling for the inter runnable variables that it
accesses. The indirection required for explicit access to inter runnable variables is
described in section 5.4.2.7. The inter runnable variable handles section within the
component data structure contains pointers to the (shadow) memory of inter runnable
variables that can be directly accessed with the implicit API macros. The inter runnable
variable handles section does not contain pointers for memory to handle inter runnable
variables that are accessed with explicit API only.
[SWS_Rte_02636] d For each runnable and each inter runnable variable that is ac-
cessed implicitly by the runnable, there shall be exactly one inter runnable handle
member within the component data structure and this inter runnable variable handle
shall point to the (shadow) memory of the inter runnable variable for the runnable. c
(SRS_Rte_00142)
[SWS_Rte_01350] d The name of each inter runnable variable handle member within
the component data structure shall be Irv_<re>_<o> where <o> is the Inter-
Runnable Variable short name and <re> is short name of the runnable name. c
(SRS_Rte_00142)
[SWS_Rte_01351] d The data type of each inter runnable variable handle member
shall be a pointer to the type of the inter runnable variable. c(SRS_Rte_00142)
[SWS_Rte_06528] d The RTE Generator shall wrap each entry of Inter Runnable
Variable Handles Section in the component data structure of a variant existent
Rte_IrvRead or Rte_IrvWrite if the variability shall be implemented.
   1   #if (<condition> [|| <condition>])
   2
   3   <Inter Runnable Variable Handles Section Entry>
   4
   5   #endif
The exclusive-area API section includes exclusive areas that are accessed explicitly,
using the RTE API, by the SW-C. Each entry in the section is a function pointer to the
relevant RTE API function generated for the SW-C instance.
[SWS_Rte_03739] d If the according SwcExclusiveAreaPolicy.apiPrinciple
of the ExclusiveArea is set to "common", the name of each Exclusive-area
API section entry shall be <root>_<name> where <root> is either Entry or
Exit and <name> is the shortName of the ExclusiveArea. c(SRS_Rte_00051,
SRS_Rte_00032)
[SWS_Rte_04545] d If the according SwcExclusiveAreaPolicy.apiPrinciple
of the ExclusiveArea is set to "perExecutable", the name of each Exclusive-area
API section entry shall be <root>_<re>_<name> where <root> is either Entry or
Port API section comprises zero or more function references within the component
data structure type that defines all API functions that access a port and can be invoked
by the software-component (instance).
[SWS_Rte_02616] d The function table entries for port access shall be grouped by the
port names into port data structures. c(SRS_Rte_00051)
Each entry in the port API section of the component data structure is a port data
structure.
[SWS_Rte_02617] d The name of each port data structure in the component data
structure shall be <p> where <p> is the port short-name. c(SRS_Rte_00051)
[SWS_Rte_03799] d The component data structure shall contain a port data structure
for port p only if at least one API from table 5.1 is present and either the component
5 #endif
[SWS_Rte_06523] d The RTE Generator shall wrap each port data structure type re-
lated to variant existent PortPrototypes if the variability shall be implemented and if
all require PortPrototypes or all provide PortPrototypes are variant.
   1    #if (<condition> [|| <condition>])
   2
   3    <port data structure type>
   4
5 #endif
where condition are the condition value macro(s) of the VariationPoints rele-
vant for the variant existence of the PortPrototypes requiring the port data structure
type (see [SWS_Rte_06520]), port data structure type is the code according
an invariant port data structure type (see also [SWS_Rte_03731], [SWS_Rte_07138],
[SWS_Rte_03730] [SWS_Rte_02620]) c(SRS_Rte_00201)
Note: If any invariant PortPrototype requires the port data structure type it shall be
defined unconditional.
[SWS_Rte_07677] d The RTE shall support an indirect API for the port access func-
tions listed in table 5.1. c(SRS_Rte_00051)
[SWS_Rte_03730] d A port data structure shall contain a function table entry for each
API function associated with the port as referenced in table 5.1. Pure API macros,
like Rte_IRead and other implicit API functions, do not have a function table entry. c
(SRS_Rte_00051)
       API function                                              reference
       Rte_Send_<p>_<o>                                          5.6.5
       Rte_Write_<p>_<o>                                         5.6.5
       Rte_Switch_<p>_<o>                                        5.6.6
       Rte_Invalidate_<p>_<o>                                    5.6.7
       Rte_Feedback_<p>_<o>                                      5.6.8
       Rte_SwitchAck_<p>_<o>                                     5.6.9
       Rte_Read_<p>_<o>                                          5.6.10
       Rte_DRead_<p>_<o>                                         5.6.10
       Rte_Receive_<p>_<o>                                       5.6.12
       Rte_Call_<p>_<o>                                          5.6.13
       Rte_Result_<p>_<o>                                        5.6.14
       Rte_Prm_<p>_<o>                                           5.6.17
       Rte_Mode_<p>_<o>                                          5.6.30
       Rte_Trigger_<p>_<o>                                       5.6.32
       Rte_IsUpdated_<p>_<o>                                     5.6.35
Table 5.1: Table of API functions that are referenced in the port API section.
ture type. API functions related to ports that are not required by the AUTOSAR config-
uration shall behave like those for an unconnected port. c(SRS_Rte_00051)
APIs may be required only for some ports of a software component instance
due to differences in for example the need for transmission acknowledgement.
[SWS_Rte_02621] is necessary for the concept of the indirect API. It allows iteration
over ports.
[SWS_Rte_01055] d The name of each function table entry in a port data structure
shall be <name>_<o> where <name> is the API root (e.g. Call, Write) and <o> the
data element or operation name. c(SRS_BSW_00305, SRS_Rte_00051)
Requirement [SWS_Rte_01055] does not include the port name in the function table
entry name since the port is implicit when using a port handle.
[SWS_Rte_03726] d The data type of each function table entry in a port data
structure shall be a function pointer that points to the generated RTE function. c
(SRS_Rte_00051)
The signature of a generated function, and hence the definition of the function pointer
type, is the same as the signature of the relevant RTE API call (see Section 5.6) with
the exception that the instance handle is omitted.
Example 5.27
This example shows a port data structure for the provide ports of the interface type i2
in an AUTOSAR SW-C c.
i2 is a SenderReceiverInterface which contains a data element prototype of type
uint8 with data semantics.
If one of the provide ports of c for the interface i2 has a transmission acknowledge-
ment defined and i2 is not used with data element invalidation, the Applica-
tion Header file would include a port data structure type like this:
   1   struct Rte_PDS_c_i2_P {
   2     Std_ReturnType (*Feedback_a)(uint8);
   3     Std_ReturnType (*Write_a)(uint8);
   4   }
If the provide port p1 of the AUTOSAR SW-C c is of interface i2, the generated Ap-
plication Header file would include the following macros to provide the direct API func-
tions Rte_Feedback_p1_a and Rte_Write_p1_a:
   1   /*direct API*/
   2   #define Rte_Feedback_p1_a(inst,data)
   3           ((inst)->p1.Feedback_a)(data)
   4   #define Rte_Write_p1_a(inst,data) ((inst)->p1.Write_a)(data)
[SWS_Rte_02618] d The port data structures within a component data structure shall
first be sorted on the port data structure type name and then on the short name of the
port. c(SRS_Rte_00051)
Example 5.28
This example shows the grouping of port data structures within the component data
structure.
The Application Header file for an AUTOSAR SW-C c with three provide ports p1, p2,
and p3 of interface i2 would include a block of port data structures like this:
   1   struct Rte_CDS_c {
   2     ...
   3     struct Rte_PDS_c_i1_R z;
   4
   5   /* component data structures                  *
   6    * for provide ports of interface i2          */
   7     struct Rte_PDS_c_i2_P p1;
   8     struct Rte_PDS_c_i2_P p2;
   9     struct Rte_PDS_c_i2_P p3;
  10
  11   /*further component data structures*/
  12     struct Rte_PDS_c_i2_R c;
  13     ...
  14   }
ph points to the port data structure p1 of the instance handle inst. Since the three
provide port data structures p1, p2, and p3 of interface i2 are ordered sequentially
in the component data structure, ph can also be interpreted as an array of port data
structures. E.g., ph[2] is equal to inst->p3.
In the following, ph will be called a port handle.
[SWS_Rte_01343] d RTE shall create port handle types for each port data structure
using typedef to a pointer to the appropriate port data structure. c(SRS_Rte_00051)
[SWS_Rte_01342]        d     The    port    handle    type    name      shall   be
Rte_PortHandle_<i>_<P/R/PR> where <i> is the port interface name and
P, R or PR are literals to indicate provide, require or provide-require ports
respectively. c(SRS_Rte_00051)
[SWS_Rte_06524] d The RTE Generator shall wrap each port handle type related
to variant existent PortPrototypes if the variability shall be implemented and if all
require PortPrototypes or all provide PortPrototypes are variant.
   1   #if (<condition> [|| <condition>])
   2
   3   <port handle type>
   4
5 #endif
where condition are the condition value macro(s) of the VariationPoints rele-
vant for the variant existence of the PortPrototypes requiring the port data structure
type (see [SWS_Rte_06520]), port data structure type is the code according
an invariant port data structure type (see also [SWS_Rte_01343], [SWS_Rte_01342])
c(SRS_Rte_00201)
[SWS_Rte_01053] d The port handle types shall be written to the application header
file. c(SRS_Rte_00051)
RTE provides port handles for access to the arrays of port data structures of the same
interface type and provide/receive direction by the macro Rte_Ports, see section
5.6.1, and to the number of similar ports by the macro Rte_NPorts, see 5.6.1.
Example 5.29
For the provide port i2 of AUTOSAR SW-C c from example 5.27, the following port
handle type will be defined in the Application Header file:
   1   typedef struct Rte_PDS_c_i2_P *Rte_PortHandle_i2_P;
The macros to access the port handles for the indirect API might look like this in the
generated Application Header file:
   1   /*indirect (port oriented) API*/
   2   #define Rte_Ports_i2_P(inst) &((inst)->p1)
   3   #define Rte_NPorts_i2_P(inst) 3
So, the port handle ph of the previous example 5.28 could be defined by a user as:
   1   Rte_PortHandle_i2_P ph = Rte_Ports_i2_P(inst);
To write 49 on all ports p1 to p3, the indirect API can be used within the software
component as follows:
   1   uint8 p;
   2   Rte_PortHandle_i2_P ph = Rte_Ports_i2_P(inst);
   3   for(p=0;p<Rte_NPorts_i_P(inst);p++) {
   4     ph[p].Write_a(49);
   5   }
Software components may also want to set up their own port handle arrays to
iterate over a smaller sub group than all ports with the same interface and direction.
Rte_Port can be used to pick the port handle for one specific port, see 5.6.3.
The Inter Runnable Variable API section comprises zero or more function table entries
within the component data structure type that defines all explicit API functions to access
an inter runnable variable by the software-component (instance). The API for implicit
access of inter runnable variables does not have any function table entries, since the
implicit API uses macros to access the inter runnable variables or their shadow mem-
ory directly, see section 5.4.2.3.
Since the entries of this section are only required to access the explicit InterRunnable-
Variable API if a software component supports multiple instantiation, it shall be omitted
for software components which do not support multiple instantiation.
[SWS_Rte_03725] d If the component supports multiple instantiation, the member
name of each function table entry within the component data structure shall be
<name>_<re>_<o> where <name> is the API root (e.g. IrvRead), <re> the runnable
name, and <o> the inter runnable variable name. c(SRS_Rte_00051)
[SWS_Rte_03752] d The data type of each function table entry shall be a function
pointer that points to the generated RTE function. c(SRS_Rte_00051)
The signature of a generated function, and hence the definition of the function pointer
type, is the same as the signature of the relevant RTE API call (see Section 5.6) with
the exception that the instance handle is omitted.
Table 5.2: Table of API functions that are referenced in the inter runnable variable API
section
[SWS_Rte_06525] d The RTE Generator shall wrap each entry of Inter Runnable Vari-
able API Section in the component data structure of a variant existent Rte_IrvRead
or Rte_IrvWrite API if the variability shall be implemented.
   1    #if (<condition>)
   2
The Inter Runnable Triggering API Section includes the Inter Runnable Triggering API
handles. Each entry in the section is a function pointer to the relevant RTE API function
generated for the SW-C instance.
[SWS_Rte_07226] d The name of each Inter Runnable Triggering handle shall be
Rte_IrTrigger_<re>_<name> where <re> is the name of the runnable entity the
API might be used and <name> is the name of the InternalTriggeringPoint. c
(SRS_Rte_00051, SRS_Rte_00163)
[SWS_Rte_07227] d The data type of each Inter Runnable Triggering handle entry
shall be a function pointer that points to the generated RTE API function defined in
5.6.33. c(SRS_Rte_00051, SRS_Rte_00163)
[SWS_Rte_06526] d The RTE Generator shall wrap each entry of Inter Runnable Trig-
gering handle in the component data structure of a variant existent Rte_IrTrigger
API if the variability shall be implemented.
   1   #if (<condition>)
   2
   3   <Inter Runnable Variable API Section Entry>
   4
5 #endif
The RAM Block Data Updated Handles section is required to express an update of
implicit written NV data in case the NvBlockSwComponentType is used (see section
4.2.9.2). For that purpose each RAM Block Updated Handle accesses a separate "dirty
flag".
[SWS_Rte_08092] d The CDS shall contain a handle for each SwcServiceDepen-
dency defining a RoleBasedPortAssignment in the role NvDataPort. This handle
member shall be named DF_<name> where <name> is the SwcServiceDependency
name. c(SRS_Rte_00051, SRS_Rte_00245)
[SWS_Rte_08093] d The data type of each RAM Block Data Updated Handle shall be
a pointer to boolean. c(SRS_Rte_00051, SRS_Rte_00245)
The RTE supports the access to dirty flags for implicit communication by invoking the
Rte_IWrite and Rte_IWriteRef APIs.
[SWS_Rte_08094] d The invocation of any Rte_IWrite or Rte_IWriteRef API of
a data belonging to a PPortPrototype / PRPortPrototype referenced in the role
NvDataPort by a SwcServiceDependency shall set the related dirty flag addressed
by the RAM Block Updated Handle to TRUE. c(SRS_Rte_00051, SRS_Rte_00245)
[SWS_Rte_07416] d For a VariableDataPrototype belonging to a PPortPro-
totype / PRPortPrototype referenced in the role NvDataPort by a SwcSer-
viceDependency the RTE shall, after the NvM has been informed, set the related
dirty flag addressed by the RAM Block Updated Handle to FALSE. c(SRS_Rte_00051,
SRS_Rte_00245)
The NvM is informed of the status change through either the invocation of
NvM_SetRamBlockStatus [SWS_Rte_08081] or directly through NvM_WriteBlock
[SWS_Rte_08085]. The invocation of either is guarded by a check on the dirty flag.
[SWS_Rte_08095] d The RTE Generator shall wrap each entry of RAM Block Data
Updated Handles Section related to variant existent PPortPrototypes / PRPort-
Prototypes referenced in the role NvDataPort by a SwcServiceDependency if
the variability shall be implemented.
   1   #if (<condition>)
   2
   3   <RAM Block Data Updated Handles Section Entry>
   4
5 #endif
where condition are the condition value macros of the VariationPoints rele-
vant for the variant existence of the Rte_IWrite and Rte_IWriteRef APIs (see
[SWS_Rte_06518]); the single condition value macros are concatenated with logical
or (k) operators to ensure the availability of the handle if any relevant API is existent,
RAM Block Data Updated Handles Section Entry is the code according an
invariant RAM Block Data Updated Handles Section Entry where condition are the
The vendor specific section is used to contain any vendor specific data required to be
supported for each instances. By definition the contents of this section are outside the
scope of this chapter and only available for use by the RTE generator responsible for
the RTE Generation phase.
[SWS_Rte_08786] d If the software component does not support multiple instantiation,
the vendor specific section shall be empty. c(SRS_Rte_00051)
5.5.1 Std_ReturnType
The specification in [31] specifies a standard API return type Std_ReturnType. The
Std_ReturnType defines the "status" and "error values" returned by API functions.
It is defined as a uint8 type. The value 0 is reserved for No error occurred.
                          LSB                                                      MSB
                          0     1    2        3     4   5       6                            7
                                                            Overlayed Error Flag
                                                                                    Error Flag
                                                                                    Immediate Infrastructure
                                    error codes
                                    available for
                                    6 bits
      c()
    [SWS_Rte_07405] dFor overlayed errors, this macro is a boolean expression that
     is true if the corresponding bit is set:
            1      #define Rte_HasOverlayedError(status)    ((status & 64U) != 0)
      c()
    [SWS_Rte_07406] dFor reading only the application error code without the even-
     tual overlayed error, the following macro returns the lower 6 bits of the error code:
            1      #define Rte_ApplicationError(status) (status & 63U)
c()
     Overlayed Errors are associated with communication events that happened af-
      ter the reception of the currently available data set, e.g., data element out-
      dated notification, or loss of data elements due to queue overflow.
      [SWS_Rte_01318] d Overlayed Error Flags shall be reported using the
      unique bit of the Overlayed Error Flag within the Std_ReturnType type.
      c(SRS_Rte_00084, SRS_Rte_00094)
      An Overlayed Error can be combined with any other application or infrastruc-
      ture error code.
[SWS_Rte_02573] d RTE shall support application errors with the following format def-
inition: Application errors are coded in the least significant 6 bits of Std_ReturnType
with the Immediate Infrastructure Error Flag set to 0. The application er-
ror code does not use the Overlayed Error Flag. c(SRS_Rte_00124)
This results in the following value range for application errors:
      range                           minimum value            maximum value
      application errors              1                        63
In client server communication, the server may return any value within the application
error range. The client will then receive one of the following:
     An Immediate Infrastructure Error to indicate that the communication
      was not successful, or
     The server return code, or
     The server return code might be overlayed by the Overlayed Error Flag in
      a future release of RTE. In this release, there is no overlayed error defined for
      client server communication.
The client can filter the return value, e.g., by using the following code:
Std_ReturnType status;
status = Rte_Call_<p>_<o>(<instance>, <parameters>);
if (Rte_HasOverlayedError(status)) {
    /* handle overlayed error flag                      *
     * in this release of the RTE, the flag is reserved *
     * but not used for client server communication     */
if(Rte_IsInfrastructureError(status)) {
    /* handle infrastructure error                                    */
}
else {
    /* handle application error with error code status                  */
    status = Rte_ApplicationError(status);
}
For client server communication, application error values are defined per client server
interface and shall be passed to the RTE with the interface configuration.
The following standard error and status identifiers are defined:
 Symbolic name                          Value   Comments
 [SWS_Rte_01058] d RTE_E_OK c           0       No error occurred.
 (SRS_BSW_00327)
 [SWS_Rte_01317] d RTE_E_LIMIT c        130     A internal RTE limit has been exceeded. Re-
 (SRS_BSW_00327)                                quest could not be handled. OUT buffers are not
                                                modified.
 Overlayed Errors
 These errors do not refer to the data returned with the API. They can be overlayed
 with other Application- or Immediate Infrastructure Errors.
The underlying type for Std_ReturnType is defined as a uint8 for reasons of com-
patibility  it avoids RTEs from different vendors assuming a different size if an enum
was the underlying type. Consequently, #define is used to declare the error values:
   1    typedef uint8 Std_ReturnType;
   2
   3    #define RTE_E_OK 0U
5.5.2 Rte_Instance
The Rte_Instance data type defines the handle used to access instance specific
information from the component data structure.
  5
      No additional capitalization is applied to the names.
[SWS_Rte_01148] d The underlying data type for an instance handle shall be a pointer
to a Component Data Structure. c(SRS_Rte_00011, SRS_Rte_00051)
The component data structure (see Section 5.4.2) is uniquely defined for a component
type and therefore the data type for the instance handle is automatically unique for
each component type.
The instance handle type is defined in the application header file [SWS_Rte_01007].
To avoid long and complex type names within SW-C code the following requirement
imposes a fixed name on the instance handle data type.
[SWS_Rte_01150] d The name of the instance handle type shall be defined, using
typedef as Rte_[Byps_]Instance. [Byps_] is an optional infix used when com-
ponent wrapper method for bypass support is enabled for the related software compo-
nent type (See chapter 4.9.2). c(SRS_BSW_00305)
[SWS_Rte_06810] d The instance handle typedef shall use the CONSTP2CONST macro
with memclass AUTOMATIC and ptrclass RTE_CONST. c(SRS_BSW_00007)
Requirement [SWS_Rte_06810] uses memclass AUTOMATIC rather than memclass
TYPEDEF because the instance handle is used as a function parameter and hence
automatic. This means the typedef is guaranteed to be compatible when the RTE
implementation must use a pointer to the component data structure rather than the
instance handle typedef.
The example 5.24 illustrates the definition of the instance handle typedef.
5.5.3 Rte_TransformerError
The data type Rte_TransformerError is a struct which contains the error code and
the transformer class to which the error belongs.
[SWS_Rte_08560] d The data type Rte_TransformerError shall be defined as
follows:
   1    struct Rte_TransformerError {
   2      Rte_TransformerErrorCode errorCode,
   3      Rte_TransformerClass transformerClass
   4    };
c(SRS_Rte_00249)
The Rte_TransformerErrorCode represents a transformer error in the con-
text of a certain transformer chain.       The specific meaning of the values of
Rte_TransformerErrorCode are always to be seen for the specific transformer
chain for which the data type represents the transformer error.
The values are specified for each transformer class in [26, ASWS Transformer Gen-
eral].
where the name of the enumeration literal <EnumLiteral> is derived according to the
following rule:
if (attribute symbol of CompuScale is available and not empty) {
    <EnumLiteral> := C identifier specified in symbol attribute of CompuScale
} else {
    if (string specified in the VT element of the CompuConst of the CompuScale
       is a valid C identifier) {
       <EnumLiteral> :=
          string specified in the VT element of the CompuConst of the CompuScale
    } else {
       if (attribute shortLabel of CompuScale is available and not empty) {
          <EnumLiteral> :=
            string specified in shortLabel attribute of CompuScale
       }
    }
}
<prefix> is the optional literalPrefix attribute defined by the Included-
DataTypeSet referring the AutosarDataType using the CompuMethod.
<value> is the value representing the CompuScales point range.
<suffix> shall be "U" for unsigned data types and empty for signed data types. c
(SRS_Rte_00167)
Please note that the IncludedDataTypeSet.literalPrefix applies only to the
AutosarDataType(s) explicitly referenced by the IncludedDataTypeSet and
does not automatically propagate to other AutosarDataType(s) associated via
DataTypeMaps. Both ApplicationDataType and mapped Implementation-
DataType must be explicitly referenced if all associated labels are to have the prefix.
[SWS_Rte_03810] implies that the RTE does add prefix to the names of the enumer-
ation constants on explicit demand only. This is necessary in order to handle enu-
meration constants supplied by Basic Software modules which all use their own prefix
convention. Such Enumeration constant names have to be unique in the whole AU-
TOSAR system.
[SWS_Rte_08401] d In the case that the same ImplementationDataType
or ApplicationPrimitiveDataType is referenced via different Included-
DataTypeSets with different literalPrefix attributes, the definition according to
Please note that the prefix can either be defined that the IncludedDataType-
Set with a literalPrefix attribute references the ApplicationDataType or it
references the ImplementationDataType.
Rationale: ApplicationPrimitiveDataType is taken as the basis for the gener-
ation of limits (as opposed to take the corresponding ImplementationDataType)
because the limits defined on the ImplementationDataType) may be wider than
the limits of the ApplicationPrimitiveDataType ((see subsection "Data Types
for Single Values" in the AUTOSAR SW-C Template [2]).
[SWS_Rte_08403] d For AUTOSAR data types which have an invalidValue speci-
fied, the Application Types header file shall contain the definition
   1    #define InvalidValue_<prefix><DataType> <invalidValue><suffix>
where
<prefix> is the optional literalPrefix attribute defined by the Included-DataTypeSet
referring the AutosarDataType
<DataType> is the short name of the data type.
<invalidValue> is the value defined as invalidValue for the data type.
<suffix> shall be "U" for unsigned data types and empty for signed data types. c()
[SWS_Rte_08416] d The Application Types Header File shall include the definitions of
all invalidValue constants used by this software component for each combination of
different literalPrefix and ApplicationPrimitiveDataType when the same
ImplementationDataType or ApplicationPrimitiveDataType is referenced
via different IncludedDataTypeSets. c(SRS_Rte_00167)
where
<BflMaskLabel> is the value of the attribute CompuScale.shortLabel
<mask> is the value of the attribute mask
<prefix> is the optional literalPrefix attribute defined by the Included-
DataTypeSet referring the AutosarDataType using the CompuMethod.
<suffix> shall be "U" for unsigned data types and empty for signed data types. c
(SRS_Rte_00167)
[SWS_Rte_07411] d For each unique CompuScale.shortLabel / CompuS-
cale.mask value pair for a CompuScale with a single contiguous bit field which
is located in the compuInternalToPhys container of a CompuMethod referenced
by an ImplementationDataType or ApplicationPrimitiveDataType accord-
ing [SWS_Rte_03809] with category BITFIELD_TEXTTABLE the Application Types
Header File shall contain a definition for the bit start position
   1   #ifndef <prefix><BflStartPnLabel>_BflPn
   2   #define <prefix><BflStartPnLabel>_BflPn <BflStartPnNumber><suffix>
   3   #endif /* <prefix><BflStartPnLabel>_BflPn */
where
<BitStartPnLabel> is the value of the attribute CompuScale.shortLabel
<BflStartPnNumber> is the number of the first bit in the attribute value CompuS-
cale.mask which is set to 1. Thereby the bit counting starts from 0 (LSB) to n (MSB).
<prefix> is the optional literalPrefix attribute defined by the Included-
DataTypeSet referring the AutosarDataType using the CompuMethod.
<suffix> shall be "U" for unsigned data types and empty for signed data types. c
(SRS_Rte_00167)
[SWS_Rte_07412] d For each unique CompuScale.shortLabel / CompuS-
cale.mask value pair for a CompuScale with a single contiguous bit field which
is located in the compuInternalToPhys container of a CompuMethod referenced
by an ImplementationDataType or ApplicationPrimitiveDataType accord-
ing [SWS_Rte_03809] with category BITFIELD_TEXTTABLE the Application Types
Header File shall contain a definition for the bit field length
   1   #ifndef <prefix><BflLengthLabel>_BflLn
   2   #define <prefix><BflLengthLabel>_BflLn <BflLength><suffix>
   3   #endif /* <prefix><BflLengthLabel>_BflLn */
where
<BflLengthLabel> is the value of the attribute shortLabel <BflLength> is the
number of contiguous bits set to 1 in the attribute value CompuScale.mask. <prefix>
is the optional literalPrefix attribute defined by the IncludedDataTypeSet re-
ferring the AutosarDataType using the CompuMethod.
<suffix> shall be "U" for unsigned data types and empty for signed data types. c
(SRS_Rte_00167)
Please note the example in section F.3.
[SWS_Rte_07414] d The requirements [SWS_Rte_07410], [SWS_Rte_07411], and
[SWS_Rte_07412] are only applied to CompuScales where the attribute shortLabel
is defined. c(SRS_Rte_00167)
5.6.1 Rte_Ports
Purpose:         Provide an array of the ports of a given interface type and a given
                 provide / require usage that can be accessed by the indirect API.
Signature:       [SWS_Rte_02619] d
                 Rte_PortHandle_<i>_<R/P/PR>
                 Rte_[Byps_]Ports_<i>_<R/P/PR>([IN Rte_Instance <instance>])
                 Where here <i> is the port interface name and P,R or PR are lit-
                 erals to indicate provide, require or provide-require ports respectively.
                 [Byps_] is an optional infix used when component wrapper method
                 for bypass support is enabled for the related software component
                 type (See chapter 4.9.2). c(SRS_Rte_00051)
Existence:       [SWS_Rte_02613] d An Rte_Ports API shall be created for each
                 interface type and usage by a port in at least one PreCompileTime
                 variant when the indirectAPI attribute of that port is set to true. c
                 (SRS_Rte_00051)
                 Please note that the usage of the Rte_Ports API is not restricted
                 to particular runnables of the software component. Nevertheless the
5.6.2 Rte_NPorts
Purpose:         Provide the number of ports of a given interface type and provide /
                 require usage that can be accessed through the indirect API.
Signature:       [SWS_Rte_02614] d
                 uint8
                 Rte_[Byps_]NPorts_<i>_<R/P/PR>([IN Rte_Instance <instance>])
5.6.3 Rte_Port
Purpose:            Provide access to the port data structure for a single port of a particu-
                    lar software component instance. This allows a software component
                    to extract a sub-group of ports characterized by the same interface in
                    order to iterate over this sub-group.
Signature:          [SWS_Rte_01354] d
                    Rte_PortHandle_<i>_<R/P/PR>
                    Rte_[Byps_]Port_<p>([IN Rte_Instance <instance>])
                    where <i> is the port interface name and <p> is the name of the port.
                    [Byps_] is an optional infix used when component wrapper method
                    for bypass support is enabled for the related software component
                    type (See chapter 4.9.2). c(SRS_Rte_00051)
Existence:          [SWS_Rte_01355] d An Rte_Port API shall be created for each
                    port of an AUTOSAR SW-C, for which the indirectAPI attribute is
                    set to true. c(SRS_Rte_00051)
                    Please note that the usage of the Rte_Port API is not restricted
                    to particular runnables of the software component. Nevertheless the
                    constraints with respect to RTE API usage by specific runnables are
                    applicable for the according elements in the port data structure.
Description:        The Rte_Port API provides a pointer to a single port data structure,
                    in order to support the indirect API.
Return Value:       Pointer to port data structure for the appropriate port.
Notes:              None.
5.6.4 Rte_Write
5.6.5 Rte_Send
5.6.6 Rte_Switch
Purpose:        Initiate a mode switch. The Rte_Switch API call is used for explicit
                sending of a mode switch notification.
Signature:      [SWS_Rte_02631] d
                Std_ReturnType
                Rte_[Byps_]Switch_<p>_<o>([IN Rte_Instance <instance>],
                                   IN <mode>)
Description:      The Rte_Switch triggers a mode switch for all connected require
                  ModeDeclarationGroupPrototypes.
                  The Rte_Switch API call includes exactly one IN parameter for the
                  next mode <mode>. The IN parameter <mode> is passed by value
                  according to the ImplementationDataType on which the Mode-
                  DeclarationGroup is mapped. The type name shall be equal to the
                  shortName of the ImplementationDataType.
Return Value:     The return value is used to indicate errors detected by the RTE during
                  execution of the Rte_Switch call.
                     [SWS_Rte_02674] d RTE_E_OK  data passed to service suc-
                      cessfully. c(SRS_Rte_00094)
                     [SWS_Rte_02675] d RTE_E_LIMIT  a mode switch has been
                      discarded by the receiving partition due to a full queue. c
                      (SRS_Rte_00143)
Notes:            Rte_Switch is restricted to ECU local communication.
                  If a mode instance is currently involved in a transition then
                  the Rte_Switch API will attempt to queue the request and re-
                  turn [SWS_Rte_02667]. However if no transition is in progress
                  for the mode instance, the mode disablings and the activations
                  of on-entry, on-transition, and on-exit ExecutableEntities for this
                  mode instance are executed before the Rte_Switch API returns
                  [SWS_Rte_02665].
                  Note that the mode switch might be discarded when the queue is full
                  and a mode transition is in progress, see [SWS_Rte_02675].
5.6.7 Rte_Invalidate
5.6.8 Rte_Feedback
5.6.9 Rte_SwitchAck
5.6.10 Rte_Read
5.6.11 Rte_DRead
5.6.12 Rte_Receive
                Where <p> is the port name and <o> the data element within the
                sender-receiver interface categorizing the port. [Byps_] is an op-
                tional infix used when component wrapper method for bypass sup-
                port is enabled for the related software component type (See chap-
                ter 4.9.2). c(SRS_BSW_00310, SRS_Rte_00141, SRS_Rte_00028,
                SRS_Rte_00131)
Existence:      [SWS_Rte_01288] d A non-blocking Rte_Receive API shall be
                generated if a VariableAccess in the dataReceivePointB-
                yArgument role references a required VariableDataPrototype
                with event semantics. c(SRS_Rte_00051)
                [SWS_Rte_07638] d The RTE Generator shall reject configurations
                were a VariableDataPrototype with event semantics is refer-
                enced by a VariableAccess in the dataReceivePointByValue
                role. c(SRS_Rte_00018)
                [SWS_Rte_01290] d A blocking Rte_Receive API shall be gener-
                ated if a VariableAccess in the dataReceivePointByArgu-
                ment role references a required VariableDataPrototype with
                event semantics that is, in turn, referenced by a DataReceivedE-
                vent and the DataReceivedEvent is referenced by a WaitPoint.
                c(SRS_Rte_00051)
                [SWS_Rte_CONSTR_09023] Rte_Receive API may only be
                used by the runnable that describe its usage d The Rte_Receive
                API may only be used by the runnable that contains the correspond-
5.6.13 Rte_Call
                Where <p> is the port name and <o> the operation within the client-
                server interface categorizing the port. [Byps_] is an optional infix
                used when component wrapper method for bypass support is en-
                abled for the related software component type (See chapter 4.9.2). c
                (SRS_BSW_00310, SRS_Rte_00029)
Existence:      [SWS_Rte_01293] d A synchronous Rte_Call API shall be gen-
                erated if a SynchronousServerCallPoint references a required
                ClientServerOperation. c(SRS_Rte_00051, SRS_Rte_00111)
                [SWS_Rte_01294] d An asynchronous Rte_Call API shall
                be generated if an AsynchronousServerCallPoint refer-
                ences a required ClientServerOperation. c(SRS_Rte_00051,
                SRS_Rte_00111)
                A configuration that includes both synchronous and asynchronous
                ServerCallPoints for a given ClientServerOperation is invalid
                ([SWS_Rte_03014]).
                [SWS_Rte_CONSTR_09024] Rte_Call API may only be used
                by the runnable that describe its usage d The Rte_Call API
                may only be used by the runnable that contains the corresponding
                ServerCallPoint c()
                [SWS_Rte_08566]  d   The     optional OUT    parameter
                transformerError of the API shall be generated if the
                PortPrototype of port <p> is referenced by a PortA-
                PIOption which has the attribute errorHandling set to
                transformerErrorHandling. c(SRS_Rte_00249)
                  Note: API call can be retried after the currently ongoing request
                  has finished.
              [SWS_Rte_08594] d In case of multiple faults during a call of
              Rte_Call the resulting return value shall be derived according to
              the following priority rules (highest priority first):
               1. RTE_E_UNCONNECTED
               2. RTE_E_IN_EXCLUSIVE_AREA
               3. RTE_E_LIMIT
               4. RTE_E_SEG_FAULT
               5. RTE_E_TRANSFORMER_LIMIT
               6. RTE_E_HARD_TRANSFORMER_ERROR
               7. RTE_E_COM_STOPPED / RTE_E_COM_BUSY
               8. RTE_E_TIMEOUT
               9. "application error"
              10. RTE_E_SOFT_TRANSFORMER_ERROR
              c(SRS_Rte_00028)
              Note that the RTE_E_OK return value indicates that the Rte_Call
              API call completed successfully. In case of a synchronous client
              server call it also indicates successful processing of the request by
              the server.
              An asynchronous server invocation is considered to be outstanding,
              if alternatively
               1. no timeout has occurred, an AsynchronousServerCallRe-
                  sultPoint exists, and the client has not retrieved the result
                  successfully yet.
               2. no timeout has occurred, no AsynchronousServerCallRe-
                  sultPoint exists, and the server has not finished to process
                  the last request of the client yet.
               3. a timeout has been detected by the RTE in inter-ECU and inter-
                  partition communication.
               4. the server runnable has terminated after a timeout was detected
                  in intra-ECU communication.
              When the RTE_E_TIMEOUT error occurs, RTE shall discard any sub-
              sequent responses to that request, (see [SWS_Rte_02657]).
5.6.14 Rte_Result
                Where <p> is the port name and <o> the operation within the client-
                server interface categorizing the port. [Byps_] is an optional infix
                used when component wrapper method for bypass support is en-
                abled for the related software component type (See chapter 4.9.2). c
                (SRS_BSW_00310)
                The signature can include zero or more IN/OUT and OUT parame-
                ters depending on the signature of the operation in the client-server
                interface.
Existence:      [SWS_Rte_01296] d A non-blocking Rte_Result API shall be gen-
                erated if an AsynchronousServerCallResultPoint exists for
                the specific RunnableEntity and this AsynchronousServer-
                CallResultPoint references an AsynchronousServerCall-
                Point which according to [SWS_Rte_01294] leads to the genera-
                tion of an asynchronous Rte_Call API but no WaitPoint (of the
                RunnableEntity) references an AsynchronousServerCallRe-
                turnsEvent that references the AsynchronousServerCallRe-
                sultPoint. c(SRS_Rte_00051)
                Please note that a non-blocking Rte_Result API does not require
                the existence of a AsynchronousServerCallReturnsEvent. If
                the AsynchronousServerCallReturnsEvent exists it can be
Return Value:   The return value is used to indicate errors from either the
                Rte_Result call itself or communication errors detected before the
                API call was made.
                   [SWS_Rte_01112] d RTE_E_OK  The API call completed suc-
                    cessfully. c(SRS_Rte_00094)
                    Note: This means that RTE_E_OK is returned when neither an
                    infrastructure error nor an overlay error occurred at the invoca-
                    tion of the server runnable and the invoked server runnable was
                    returning a value equal to E_OK.
                   [SWS_Rte_08591] d RTE_E_TRANSFORMER_LIMIT  The RTE
                    is not able to allocate the buffer needed to transform the data. c
                    (SRS_Rte_00094, SRS_Rte_00091)
                   [SWS_Rte_08729] d RTE_E_HARD_TRANSFORMER_ERROR 
                    The return value of one transformer in the transformer chain
                    represented a hard transformer error.     c(SRS_Rte_00094,
                    SRS_Rte_00091)
                   [SWS_Rte_08556] d RTE_E_SOFT_TRANSFORMER_ERROR 
                    The return value of at least one transformer in the transformer
                    chain was a soft error and no hard error occurred in the trans-
                    former chain. c(SRS_Rte_00094, SRS_Rte_00091)
                   [SWS_Rte_01113] d RTE_E_NO_DATA  (non-blocking read)
                    The servers result is not available but no other error occurred
                    within the API call or the server was not called since Rte_Start
                    or the restart of the Partition. The buffers for the IN/OUT and
                    OUT parameters shall not be modified. c(SRS_Rte_00094)
                   [SWS_Rte_08301]   d    RTE_E_NO_DATA        (non-
                    blocking read) The previous Rte_Call returned an
                    RTE_E_SEG_FAULT,         RTE_E_TRANSFORMER_LIMIT,
                    RTE_E_HARD_TRANSFORMER_ERROR. c(SRS_Rte_00094)
                   [SWS_Rte_01114] d RTE_E_TIMEOUT  The servers result is
                    not available within the specified timeout but no other error oc-
                    curred within the API call. The buffers for the IN/OUT and
                    OUT parameters shall not be modified. c(SRS_Rte_00094,
                    SRS_Rte_00069)
                   [SWS_Rte_03606] d RTE_E_COM_STOPPED  the RTE could
                    not perform the operation because the COM service is currently
                    not available (inter ECU communication only). RTE shall re-
                    turn RTE_E_COM_STOPPED when the corresponding COM ser-
                    vice returns COM_SERVICE_NOT_AVAILABLE. The servers re-
                    sult has not been successfully retrieved from the communication
5.6.15 Rte_Pim
5.6.16 Rte_CData
5.6.17 Rte_Prm
                Where <p> is the port name and <o> is the name of the Param-
                eterDataPrototype within the ParameterInterface catego-
                rizing the port. [Byps_] is an optional infix used when compo-
                nent wrapper method for bypass support is enabled for the related
                software component type (See chapter 4.9.2). c(SRS_BSW_00310,
                SRS_Rte_00155)
5.6.18 Rte_IRead
                Where <re> is the runnable entity name, <p> the port name and
                <o> the VariableDataPrototype name. [Byps_] is an optional
                infix used when component wrapper method for bypass support is
                enabled for the related software component type (See chapter 4.9.2).
                c(SRS_BSW_00310, SRS_Rte_00128)
Existence:      [SWS_Rte_01301] d An Rte_IRead API shall be created for a re-
                quired VariableDataPrototype if the RunnableEntity has a
                VariableAccess in the dataReadAccess role referring to this
                VariableDataPrototype. c(SRS_Rte_00051)
                [SWS_Rte_CONSTR_09083] Rte_IRead API may only be used
                by the runnable that describe its usage d The Rte_IRead API
                may only be used by the runnable that contains the corresponding
                VariableAccess in the dataReadAccess role. c()
Description:    The Rte_IRead API provides access to the VariableDataPro-
                totypes declared as accessed by a runnable using VariableAc-
                cesses in the dataReadAccess role. As the APIcan also be used
                in context of category 1A runnables an implementation has to ensure
                finite and constant execution times.
                No error information is provided by this API. If required, the error
                status can be picked up with a separate API, see 5.6.22
                The data value can always be read. To provide the required consis-
                tency the API provides access to a copy of the data data element for
                which its guaranteed that it never changes during the actual execu-
                tion of the runnable entity.
                Implicit data read access by a SW-C should always return defined
                data.
                [SWS_Rte_01268] d The RTE shall ensure that implicit read
                accesses will not deliver undefined data item values.   c
                (SRS_Rte_00108, SRS_Rte_00051, SRS_Rte_00128)
                [SWS_Rte_01394] d In case read access is not possible due to a
                currently ongoing reception the invalidValue shall be provided as
                the result of this implicit read access. c(SRS_Rte_00246)
                In case where there may be an implicit read access before the first
                data reception an initial value has to be provided as the result of this
                implicit read access.
Return Value:   The Rte_IRead return value provide access to the data value of the
                VariableDataPrototype.
                The return type of Rte_IRead is dependent on the Implementa-
                tionDataType of the VariableDataPrototype and can either
                be a value or a pointer to the location where the value can be ac-
                cessed. Thus the component does not need to use type casting to
                convert access to the VariableDataPrototype data.
                For details of the <return> value definition see section 5.2.6.6.
Notes:          None.
5.6.19 Rte_IWrite
                Where <re> is the runnable entity name, <p> the port name and
                <o> the VariableDataPrototype name. [Byps_] is an optional
                infix used when component wrapper method for bypass support is
                enabled for the related software component type (See chapter 4.9.2).
                c(SRS_BSW_00310, SRS_Rte_00129)
Existence:      [SWS_Rte_01302] d An Rte_IWrite API shall be created for a
                provided VariableDataPrototype if the RunnableEntity has a
                VariableAccess in the dataWriteAccess role referring to this
                VariableDataPrototype. c(SRS_Rte_00051)
                [SWS_Rte_CONSTR_09084] Rte_IWrite API may only be used
                by the runnable that describe its usage d The Rte_IWrite API
                may only be used by the runnable that contains the corresponding
                VariableAccess in the dataWriteAccess role. c()
Description:    The Rte_IWrite API provides write access to the VariableDat-
                aPrototypes declared as accessed by a runnable using Vari-
                ableAccesses in the dataWriteAccess role. The API function
                is guaranteed to be have constant execution time and therefore can
                also be used within category 1A runnable entities.
                No access error information is required for the user  the value can
                always be written. To provide the required write-back semantics the
                RTE only makes written values available to other entities after the
                writing runnable entity has terminated.
                [SWS_Rte_03746] d The Rte_IWrite API call includes the
                IN parameter <data> to pass the data element to write. c
                (SRS_Rte_00051, SRS_Rte_00129)
5.6.20 Rte_IWriteRef
                Where <re> is the runnable entity name, <p> the port name and
                <o> the VariableDataPrototype name. [Byps_] is an optional
                infix used when component wrapper method for bypass support is
                enabled for the related software component type (See chapter 4.9.2).
                c(SRS_BSW_00310, SRS_Rte_00129)
Existence:      [SWS_Rte_05510] d An Rte_IWriteRef API shall be created for a
                provided VariableDataPrototype if the RunnableEntity has
                a VariableAccess in the dataWriteAccess role referring to this
                VariableDataPrototype. c(SRS_Rte_00051)
                [SWS_Rte_CONSTR_09085] Rte_IWriteRef API may only
                be used by the runnable that describe its usage d The
                Rte_IWriteRef API may only be used by the runnable that con-
                tains the corresponding VariableAccess in the dataWriteAc-
                cess role. c()
Description:    The Rte_IWriteRef API returns a reference to the VariableDat-
                aPrototypes declared as accessed by a runnable using Vari-
                ableAccesses in the dataWriteAccess role. The reference
                can be used by the runnable to directly update the correspond-
                ing data elements. This is especially useful for data elements
                of Structure Implementation Data Type or Array Imple-
                mentation Data Type. The API function is guaranteed to be have
                constant execution time and therefore can also be used within cate-
                gory 1A runnable entities.
5.6.21 Rte_IInvalidate
                 Where <re> is the runnable entity name, <p> the port name and
                 <o> the VariableDataPrototype name. [Byps_] is an optional
                 infix used when component wrapper method for bypass support is
                 enabled for the related software component type (See chapter 4.9.2).
                 c(SRS_BSW_00310, SRS_Rte_00078)
Existence:       [SWS_Rte_03801] d An Rte_IInvalidate API shall be created for
                 a provided VariableDataPrototype if the RunnableEntity has
5.6.22 Rte_IStatus
               Std_ReturnType
               Rte_[Byps_]IStatus_<re>_<p>_<o>(
                   [IN Rte_Instance <instance>],
                   [OUT Rte_TransformerError transformerError])
               Where <re> is the runnable entity name, <p> the port name and
               <o> the VariableDataPrototype name. [Byps_] is an optional
               infix used when component wrapper method for bypass support is
               enabled for the related software component type (See chapter 4.9.2).
               c(SRS_Rte_00147, SRS_Rte_00078)
Existence:     [SWS_Rte_02600] d An Rte_IStatus API shall be created for a
               required VariableDataPrototype if a RunnableEntity has a
               VariableAccess in the dataReadAccess role referring to this
               VariableDataPrototype, and
                  if at the RPortPrototype or PRPortPrototype a Non-
                   queuedReceiverComSpec with either
                      the attribute aliveTimeout set to a value greater than zero
                       and/or
                      the attribute handleNeverReceived set to TRUE and/or
                      the attribute handleOutOfRange not set to none and/or
                      the attribute handleDataStatus set to TRUE
                   and/or
                  if at the SenderReceiverInterface classifying the RPort-
                   Prototype or PRPortPrototype an InvalidationPolicy
                   set to keep
               is specified for this VariableDataPrototype. c(SRS_Rte_00147,
               SRS_Rte_00078)
               [SWS_Rte_CONSTR_09027] Rte_IStatus API shall only be
               used by a RunnableEntity describing an read access to
               the related data d The Rte_IStatus API shall only be used
               by a RunnableEntity that has a VariableAccess in the
               dataReadAccess role referring to the VariableDataPrototype
               to which the status belongs. c()
               [SWS_Rte_08568]  d   The     optional OUT    parameter
               transformerError of the API shall be generated if the
               PortPrototype of port <p> is referenced by a PortA-
               PIOption which has the attribute errorHandling set to
               transformerErrorHandling. c(SRS_Rte_00249)
Description:   The Rte_IStatus API provides access to the current status of the
               data elements declared as accessed by a runnable using a Vari-
                     chain was a soft error and no hard error occurred in the trans-
                     former chain. c(SRS_Rte_00094, SRS_Rte_00091)
Notes:          [SWS_Rte_06829] d In case of multiple faults during reception of
                the related data the resulting return value of Rte_IStatus shall be
                derived according to the following priority rules (highest priority first):
                  1. RTE_E_UNCONNECTED
                  2. RTE_E_COM_STOPPED
                  3. RTE_E_NEVER_RECEIVED
                  4. RTE_E_HARD_TRANSFORMER_ERROR
                  5. RTE_E_INVALID
                  6. RTE_E_OUT_OF_RANGE
                  7. RTE_E_SOFT_TRANSFORMER_ERROR
                c(SRS_Rte_00147,            SRS_Rte_00078,             SRS_Rte_00184,
                SRS_Rte_00180)
                Please note that RTE_E_MAX_AGE_EXCEEDED is an overlay error
                and could be combined with any other error. Nevertheless in case
                of RTE_E_UNCONNECTED or RTE_E_COM_STOPPED time out mon-
                itoring is NOT active which in turn excludes the coincidence of
                RTE_E_MAX_AGE_EXCEEDED.
5.6.23 Rte_IrvIRead
                Where <re> is the name of the runnable entity the API might be
                used in, <o> is the name of the VariableDataPrototype in role
                implicitInterRunnableVariable. [Byps_] is an optional in-
                fix used when component wrapper method for bypass support is en-
                abled for the related software component type (See chapter 4.9.2). c
                (SRS_BSW_00310, SRS_Rte_00142)
Existence:      [SWS_Rte_01303] d An Rte_IrvIRead API shall be created
                for each VariableAccess in role readLocalVariable to
                an implicitInterRunnableVariable.     c(SRS_Rte_00051,
                SRS_Rte_00142)
5.6.24 Rte_IrvIWrite
5.6.25 Rte_IrvIWriteRef
5.6.26 Rte_IrvRead
                Where <re> is the name of the runnable entity the API might be used
                in, <o> is the name of the InterRunnableVariables. [Byps_] is an
                optional infix used when component wrapper method for bypass sup-
                port is enabled for the related software component type (See chap-
                ter 4.9.2).
                The complex type signature is used, if the Implementation-
                DataType of the InterRunnableVariable resolves to Array
                Implementation Data Type or Structure Implementation
                Data Type, otherwise the primitive type signature is used. c
                (SRS_BSW_00310, SRS_Rte_00142)
Existence:      [SWS_Rte_01305] d An Rte_IrvRead API shall be created
                for each read InterRunnableVariable using explicit access. c
                (SRS_Rte_00142, SRS_Rte_00051)
                [SWS_Rte_CONSTR_09089] Rte_IrvRead API may only be
                used by the runnable that describe its usage d The Rte_IrvRead
                API may only be used by the runnable that contains the correspond-
                ing VariableAccess in the readLocalVariable role. c()
Description:    The Rte_IrvRead API provides read access to the defined Inter-
                RunnableVariables with explicit behavior within a component descrip-
                tion.
                The return value is not required to pass error information to the user
                because no inter-ECU communication is involved and there will al-
                ways be a readable value present.
                For the primitive type signature, the return value is used to deliver
                the requested data value. For the complex type signature, the return
                value is void.
                For the complex type signature, the Rte_IrvRead API call includes
                the OUT parameter <data> to pass back the received data. The
5.6.27 Rte_IrvWrite
                Where <re> is the name of the runnable entity the API might be
                used in, <o> is the name of the InterRunnableVariable to access
                and <data> is the placeholder for the data the InterRunnableVari-
                able shall be set to. [Byps_] is an optional infix used when com-
                ponent wrapper method for bypass support is enabled for the related
5.6.28 Rte_Enter
5.6.29 Rte_Exit
5.6.30 Rte_Mode
There exist two versions of the Rte_Mode API. Depending on the attribute enhanced-
ModeApi in the software component description there shall be provided different ver-
sions of this API (see also 5.6.31).
Purpose:         Provides the currently active mode of a mode switch port.
Signature:       [SWS_Rte_02628] d
                 <return>
                 Rte_[Byps_]Mode_<p>_<o>([IN Rte_Instance <instance>])
Purpose:       Provides the currently active mode of a mode switch port. If the mode
               machine instance is in transition additionally the values of the
               previous and the next mode are provided.
Signature:     [SWS_Rte_08500] d
               <return>
               Rte_[Byps_]Mode_<p>_<o>([IN Rte_Instance <instance>,]
                                 OUT <previousmode>,
                                 OUT <nextmode>)
                The Rte_Mode will return the same mode for all mode switch
                ports that are connected to the same mode switch port of the
                mode manager (see [SWS_Rte_02630]).
                It is supported to have ModeAccessPoint(s) referring the provided
                mode switch ports of the mode manager to provide access for
                the mode manager on the information that the RTE uses for the
                mode disabling dependencys.
Return Value:   The return type of Rte_Mode is dependent on the Implementa-
                tionDataType of the ModeDeclarationGroup. It shall return
                the value of the ModeDeclarationGroupPrototype. The type
                name shall be equal to the shortName of the Implementation-
                DataType. The return value of the Rte_Mode and the parameters
                <previousmode> and <nextmode> are used to inform the caller
                about the current mode of the mode machine instance.
                [SWS_Rte_08504] d During a transition of a mode machine in-
                stance Rte_Mode shall return the following values
                   the return value shall be
                    RTE_TRANSITION_<ModeDeclarationGroup>,
                   <previousmode> shall contain the value of the
                    RTE_MODE_<ModeDeclarationGroup>_<ModeDeclaration>
                    of the mode being left,
                   <nextmode> shall contain the
                    RTE_MODE_<ModeDeclarationGroup>_<ModeDeclaration>
                    of the mode being entered,
                where <ModeDeclarationGroup> is the short name of the Mode-
                DeclarationGroup and <ModeDeclaration> is the short name
                of the ModeDeclaration. c(SRS_Rte_00144, SRS_Rte_00210)
                [SWS_Rte_08505] d When the mode machine instance is in a
                defined mode, Rte_Mode shall return the following values
                   the  return value  shall contain  the  value of
                    RTE_MODE_<ModeDeclarationGroup>_<ModeDeclaration>,
                   <previousmode> shall contain the value of the
                    RTE_MODE_<ModeDeclarationGroup>_<ModeDeclaration>
                   <nextmode> shall contain the
                    RTE_MODE_<ModeDeclarationGroup>_<ModeDeclaration>
                where <ModeDeclarationGroup> is the short name of the Mode-
                DeclarationGroup and <ModeDeclaration> is the short name
                of the currently active ModeDeclaration. c(SRS_Rte_00144)
5.6.32 Rte_Trigger
                void Rte_[Byps_]Trigger_<p>_<o>(
                    [IN Rte_Instance <instance>],
                    [OUT Rte_TransformerError transformerError])
                Where <p> is the port name and <o> the Trigger within the trigger
                interface categorizing the port. [Byps_] is an optional infix used
                when component wrapper method for bypass support is enabled for
                the related software component type (See chapter 4.9.2).
                The signature for queuing support shall be generated by the RTE
                generator if the swImplPolicy of the associated Trigger is set to
                queued. c(SRS_Rte_00162)
                Data Transformation of external triggers is only supported for external
                triggers without queueing support.
Existence:      [SWS_Rte_07201] d The existence of a ExternalTriggering-
                Point shall result in the generation of a Rte_Trigger API. c
                (SRS_Rte_00162)
                [SWS_Rte_05300]        d   The    optional   OUT   parameter
                transformerError of the API shall be generated if the Port-
                Prototype of port <p> is referenced by a PortAPIOption which
                has the attribute errorHandling set to transformerErrorHan-
                dling. c(SRS_Rte_00249)
                [SWS_Rte_CONSTR_09032] Rte_Trigger API may only be
                used by the runnable that describe its usage d The Rte_Trigger
                API may only be used by the runnable that contains the correspond-
                ing ExternalTriggeringPoint. c()
Description:    The Rte_Trigger API triggers an execution for all runnables whose
                ExternalTriggerOccurredEvent is associated to the Trigger.
                The OUT parameter transformerError contains the transformer
                error which occurred during execution of the transformer chain. See
                chapter 4.10.5.
Return Value:   None in case of signature without queuing support.
                [SWS_Rte_06720] d The Rte_Trigger API shall return the follow-
                ing values:
                   RTE_E_OK if the trigger was successfully queued or if no queue
                    is configured
                   RTE_E_LIMIT if the trigger was not queued because the maxi-
                    mum queue size is already reached.
5.6.33 Rte_IrTrigger
Purpose:         Raise a internal trigger to activate Runnable entities of the same soft-
                 ware component instance.
Signature:       [SWS_Rte_07203] d
                 signature without queuing support:
                 void Rte_[Byps_]IrTrigger_<re>_<o>(
                     [IN Rte_Instance <instance>])
                 Where <re> is the name of the runnable entity the API might be
                 used in and <o> is the name of the InternalTriggeringPoint.
                 [Byps_] is an optional infix used when component wrapper method
                 for bypass support is enabled for the related software component
                 type (See chapter 4.9.2).
                 The signature for queuing support shall be generated by the RTE
                 generator if the swImplPolicy of the associated InternalTrig-
                 geringPoint is set to queued. c(SRS_Rte_00163)
Existence:       [SWS_Rte_07204] d The existence of a InternalTriggering-
                 Point shall result in the generation of a Rte_IrTrigger API. c
                 (SRS_Rte_00163)
                 [SWS_Rte_CONSTR_09033] Rte_IrTrigger API may only
                 be used by the runnable that describe its usage d The
                 Rte_IrTrigger API may only be used by the runnable that con-
                 tains the corresponding InternalTriggeringPoint. c()
Description:     The Rte_IrTrigger triggers an execution for all runnables
                 whose InternalTriggerOccurredEvent is associated to the
                 InternalTriggeringPoint.
Return Value:    None in case of signature without queuing support.
                 [SWS_Rte_06721] d The Rte_Trigger API shall return the follow-
                 ing values:
                    RTE_E_OK if the trigger was successfully queued or if no queue
                     is configured
                    RTE_E_LIMIT if the trigger was not queued because the maxi-
                     mum queue size is already reached.
5.6.34 Rte_IFeedback
                Where <re> is the runnable entity name, <p> the port name and <o>
                the VariableDataPrototype within the sender-receiver interface
                categorizing the port. [Byps_] is an optional infix used when com-
                ponent wrapper method for bypass support is enabled for the related
                software component type (See chapter 4.9.2). c(SRS_BSW_00310,
                SRS_Rte_00122, SRS_Rte_00129, SRS_Rte_00185)
Existence:      Note: according to [SWS_Rte_01283], acknowledgment is enabled
                for a provided VariableDataPrototype by the existence of a
                TransmissionAcknowledgementRequest in the SenderCom-
                Spec.
                [SWS_Rte_07646] d An Rte_IFeedback API shall be created for
                a provided VariableDataPrototype if acknowledgment is en-
                abled and the RunnableEntity has a VariableAccess in the
                dataWriteAccess role referring to this VariableDataProto-
                type. c(SRS_Rte_00122, SRS_Rte_00129, SRS_Rte_00185)
                [SWS_Rte_07647] d An Rte_IFeedback API shall be created for a
                provided VariableDataPrototype if acknowledgment is enabled
                and a DataWriteCompletedEvent references the RunnableEn-
                tity as well as the VariableAccess which in turn references the
                VariableDataPrototype. c(SRS_Rte_00122, SRS_Rte_00129,
                SRS_Rte_00185)
                [SWS_Rte_07648] d If acknowledgment is enabled for a provided
                VariableDataPrototype and a DataWriteCompletedEvent
                references a runnable entity as well as the VariableAccess which
                in turn references the VariableDataPrototype, the runnable en-
                tity shall be activated when the transmission acknowledgment occurs
                or when a timeout was detected by the RTE. See [SWS_Rte_07379].
                c(SRS_Rte_00122, SRS_Rte_00129, SRS_Rte_00185)
                [SWS_Rte_CONSTR_09000] Rte_IFeedback API may only be
                used by the RunnableEntitys that describe its usage d The
5.6.35 Rte_IsUpdated
5.6.36 Rte_PBCon
                 Proxy.postBuildValueAccess = PostBuildVariantCondi-
                 tion.value), where PBVarCon is the set of all postBuild-
                 VariantConditions of the VariationPointProxy. If a pre-
                 build condition is defined in addition the return value shall be the
                 result of the evaluated expression P P BExp:VariationPoint-
                                             V
                 Proxy.conditionAccess P BExp.
                 The return type of Rte_PBCon shall be in this case the Platform Type
                 boolean. c(SRS_Rte_00191)
Notes:           [SWS_Rte_08070] d For VariationPointProxys of category
                 CONDITION that are using both conditionAccess and post-
                 BuildVariantCondition the RTE shall ensure in Rte_PBCon
                 that pre-build conditions have precedence over post-build conditions.
                 c(SRS_Rte_00191)
                 More details regarding Rte_PBCon API can be found in section 4.7.5.
For components implemented using C or C++ the entry point of a runnable entity is
implemented by a function with global scope defined within a software-components
source code. The following sections consider the function signature and prototype.
5.7.1 Signature
The definition of all runnable entities, whatever the RTEEvent that triggers their exe-
cution, follows the same basic form.
[SWS_Rte_01126] d
<void|Std_ReturnType> [Byps_]<prefix><name>(
    [IN Rte_Instance <instance>],
    [IN Rte_ActivatingEvent_<name> <activation>],
    [role parameters])
Where <name> 8 is the symbol describing the runnables entry point and <prefix> is
the optional SymbolProps.symbol attribute of the AtomicSwComponentType own-
ing the RunnableEntity, i.e. <prefix> will only appear if the attribute Symbol-
Props.symbol exists. The usage of Rte_ActivatingEvent is optional and de-
fined in [SWS_Rte_08051]. The definition of the role parameters is defined in Sec-
tion 5.7.3. [Byps_] is an optional infix used when component wrapper method for by-
pass support is enabled for the related software component type (See chapter 4.9.2).
c(SRS_Rte_00031, SRS_Rte_00011, SRS_Rte_00238)
Section 5.2.6.4 contains details on a recommended naming conventions for runnable
entities based on the RTEEvent that triggers the runnable entity. The recommended
naming convention makes explicit the functions that implement runnable entities as well
as clearly associating the runnable entity and the applicable data element or operation.
The RTE determines the required role parameters, and hence the prototype of the
entry point, for a runnable entity based on information in the input information. The
entry point defined in the component source must be compatible with the parameters
passed by the RTE when the runnable entity is triggered by the RTE and therefore the
RTE generator is required to emit a prototype for the function.
[SWS_Rte_01132] d The RTE generator shall emit a prototype for the runnable en-
titys entry point in the Application Header File. c(SRS_Rte_00087, SRS_Rte_00051,
SRS_Rte_00031)
   8
    Runnable entities have two names associated with them in the AUTOSAR Software Component
Template; the runnables identifier and the entry points symbol. The identifier is used to reference
the runnable entity within the input data and the symbol used within code to identify the runnables
implementation. In the context of a prototype for a runnable entity, name is the runnable entitys entry
point symbol.
The prototype for a function implementing the entry point of a runnable entity is emitted
for both RTE Contract and RTE Generation phases. The function name for the
prototype is the runnable entitys entry point. The prototype of the entry point function
includes the runnable entitys instance handle and its role parameters, see Listing 5.1.
[SWS_Rte_07194] d The RTE Generator shall wrap each RunnableEntitys Entry
Point Prototype in the Application Header File with the Memory Mapping and Compiler
Abstraction macros.
   1   #define [Byps_]<c>_START_SEC_<sadm>
   2   #include "[Byps_]<c>_MemMap.h"
   3
   4   FUNC(<void|Std_ReturnType>, <c>_<sadm>) [Byps_]<prefix><name> (
   5                             [IN Rte_Instance <instance>],
   6                             [IN Rte_ActivatingEvent_<name> <activation>],
   7                             [role parameters]);
   8
   9   #define [Byps_]<c>_STOP_SEC_<sadm>
  10   #include "[Byps_]<c>_MemMap.h"
Example 5.30
For software component "HugeSwc" with a runnable "FOO" where the Symbol-
Props.symbol is set to "TinySwc" the Application Header File contains the definition:
   1   /* Application Header File of HugeSwc*/
   2   #define RTE_RUNNABLE_FOO TinySwcfoo
This can be used in the software components c file for the definition of the runnable:
   1   /* software component c file */
   2   RTE_RUNNABLE_FOO()
   3   {
   4     /* The algorithm of foo */
   5     return;
   6   }
The role parameters are optional and their presence and types depend on the RTE-
Event that triggers the execution of the runnable entity. The role parameters that are
necessary for each triggering RTEEvent are defined in Section 5.7.5.
[SWS_Rte_06703] d The RTE Generator shall name role parameters according to the
value of the symbol attribute of RunnableEntityArguments if RunnableEntit-
yArguments are defined for the related RunnableEntity and if no mapping to a
BswModuleEntry is defined. c(SRS_Rte_00087)
[SWS_Rte_06704] d The RTE Generator shall name role parameters according to the
shortName of the SwServiceArgs of the mapped BswModuleEntry if a mapping
of the RunnableEntity to a BswModuleEntry is defined. c(SRS_Rte_00087)
Please note that RunnableEntityArguments defined for a RunnableEntity
which is mapped to a BswModuleEntry are irrelevant.
[SWS_Rte_06705] d The RTE Generator shall generate nameless role parameters if
neither RunnableEntityArguments nor a mapping to a BswModuleEntry is de-
fined for the RunnableEntity. c(SRS_Rte_00087)
Further details about the mapping of RunnableEntitys and BswModuleEntry can
be found section "Synchronization with a Corresponding SWC" of the document [9]
A function in C or C++ is required to have a return type. The RTE only uses the function
return value to return application error codes of a server operation.
[SWS_Rte_01130] d A function implementing a runnable entity entry point shall only
have the return type Std_ReturnType, if the runnable entity represents a server oper-
ation and the AUTOSAR interface description of that client server communication lists
potential application errors. All other functions implementing a runnable entity entry
point shall have a return type of void. c(SRS_Rte_00124, SRS_Rte_00031)
Note: If the potential application errors include RTE_E_OK, this shall also lead to a
return type of Std_ReturnType.
[SWS_Rte_CONSTR_09045] The upper two bits of the of the server return value
are reserved d Only the least significant six bit of the return value of a server runnable
shall be used by the application to indicate an error. The upper two bit shall be zero. c
()
See also [SWS_Rte_02573].
The RTE is the sole entity that can trigger the execution of a runnable entity. The RTE
triggers runnable entities in response to different RTEEvents.
The most basic RTEEvent that can trigger a runnable entity is the TimingEvent
that causes a runnable entity to be periodically triggered by the RTE. In contrast, the
remaining RTEEvents that can trigger runnable entities all occur as a result of com-
munication activity or as a result of mode switches.
The following subsections describe the conditions that can trigger execution of a runn-
able entity. For each triggering event the signature of the function (the entry point)
that implements the runnable entity is defined. The signature definition includes two
classes of parameters for each function;
  1. The instance handle  the parameter type is always Rte_Instance.
     ([SWS_Rte_01016])
  2. The role parameters  used to pass information required by the runnable entity
     as a consequence of the triggering condition. The presence (and number) of role
     parameters depends solely on the triggering condition.
5.7.5.1 TimingEvent
c(SRS_Rte_00072)
5.7.5.2 BackgroundEvent
c(SRS_Rte_00072)
5.7.5.3 SwcModeSwitchEvent
c(SRS_Rte_00072, SRS_Rte_00143)
5.7.5.4 AsynchronousServerCallReturnsEvent
Purpose:        Triggers a runnable entity used to collect the result and status infor-
                mation of an asynchronous client-server operation.
Signature:      [SWS_Rte_01133] d
                void <name>([IN Rte_Instance <instance>])
5.7.5.5 DataReceiveErrorEvent
Purpose:        Triggers a runnable entity used to collect the error status of a data
                element with data semantics on the receiver side.
Signature:      [SWS_Rte_01359] d
                void <name>([IN Rte_Instance <instance>])
5.7.5.6 OperationInvokedEvent
Purpose:        An RTEEvent that causes the RTE to trigger a runnable entity whose
                entry point provides an implementation for a client-server operation.
5.7.5.7 DataReceivedEvent
Purpose:        A runnable entity triggered by the RTE to receive and process a signal
                received on a sender-receiver interface.
Signature:      [SWS_Rte_01135] d
                void <name>([IN Rte_Instance <instance>])
5.7.5.8 DataSendCompletedEvent
Purpose:        A runnable entity triggered by the RTE to receive and process trans-
                mit acknowledgment notifications.
Signature:      [SWS_Rte_01137] d
                void <name>([IN Rte_Instance <instance>])
5.7.5.9 ModeSwitchedAckEvent
Purpose:           A runnable entity triggered by the RTE to receive and process mode
                   switched acknowledgment notifications.
Signature:         [SWS_Rte_02758] d
                   void <name>([IN Rte_Instance <instance>])
5.7.5.10 SwcModeManagerErrorEvent
5.7.5.11 ExternalTriggerOccurredEvent
                   c(SRS_Rte_00162, SRS_Rte_00072)
                   [SWS_Rte_05301]        d   The    optional   OUT   parameter
                   transformerError of the API shall be generated if the Port-
                   Prototype of port <p> is referenced by a PortAPIOption which
                   has the attribute errorHandling set to transformerErrorHan-
                   dling. c(SRS_Rte_00249)
                   The OUT parameter transformerError contains the transformer
                   error which occurred during execution of the transformer chain. See
                   chapter 4.10.5. Because the RunnableEntity can only be trig-
                   gered if the error is no hard error, the error given here is always a soft
                   error. Hard errors are notified via TransformerHardErrorEvents.
Notes:
5.7.5.12 InternalTriggerOccurredEvent
                    c(SRS_Rte_00163, SRS_Rte_00072)
Notes:              
5.7.5.13 DataWriteCompletedEvent
Purpose:            A runnable entity triggered by the RTE to receive and process trans-
                    mit acknowledgment notifications for implicit communication.
Signature:          [SWS_Rte_07379] d
                    void <name>([IN Rte_Instance <instance>])
5.7.5.14 InitEvent
                    c(SRS_Rte_00072, SRS_Rte_00240)
Notes:              The runnable entity triggered by a InitEvent RTEEvent is sup-
                    posed to be used for initialization purposes, i.e. for starting and
                    restarting a partition. It is not guaranteed that all RunnableEn-
                    titys referenced by this InitEvent are executed before the regu-
                    lar RunnableEntitys are executed for the first time.
5.7.5.15 TransformerErrorEvent
                 c(SRS_Rte_00072, SRS_Rte_00249)
Notes:           The RunnableEntity triggered by a TransformerHardEr-
                 rorEvent RTEEvent is supposed to be used for reaction on a
                 hard transformer error on the server side of a client/server co-
                 mumunication or in the external trigger sink. The IN parameter
                 transformerError contains the transformer error which occured
                 during execution of the transformer chain. See chapter 4.10.5.
5.7.6 Reentrancy
Example 5.31
Consider a component c1 with runnable entity re1 and entry point ep that is instanti-
ated twice on the same ECU.
The two instances of c1 each has a separate instance of re1. Software-component
instances are scheduled independently and therefore each instance of re1 could be
concurrently executing ep.
The potential for concurrent execution of runnable entities when multiple instances of
a software-component are created means that each entry point should be reentrant.
5.8.1 Rte_Start
5.8.1.1 Signature
[SWS_Rte_02569] d
Std_ReturnType Rte_Start(void)
c(SRS_BSW_00310, SRS_Rte_00116)
5.8.1.2 Existence
5.8.1.3 Description
5.8.1.5 Notes
5.8.2 Rte_Stop
5.8.2.1 Signature
[SWS_Rte_02570] d
Std_ReturnType Rte_Stop(void)
c(SRS_Rte_00116)
5.8.2.2 Existence
5.8.2.3 Description
5.8.2.5 Notes
5.8.3 Rte_PartitionTerminated
5.8.3.1 Signature
[SWS_Rte_07330] d
void Rte_PartitionTerminated_<PID>(void)
c(SRS_Rte_00223)
Where <PID> is the name of the EcucPartition according to the ECU Configuration
Description [5].
5.8.3.2 Existence
5.8.3.3 Description
None.
5.8.3.5 Notes
5.8.4 Rte_PartitionRestarting
5.8.4.1 Signature
[SWS_Rte_07620] d
void Rte_PartitionRestarting_<PID>(void)
Where <PID> is the name of the EcucPartition according to the ECU Configuration
Description [5]. c(SRS_Rte_00223)
5.8.4.2 Existence
5.8.4.3 Description
None.
5.8.4.5 Notes
5.8.5 Rte_RestartPartition
The API Rte_RestartPartition initializes the RTE resources allocated for a parti-
tion.
  Service name:         Rte_RestartPartition_<PID>
  Syntax:               Std_ReturnType Rte_RestartPartition_<PID>(
                        void
                        )
  Service ID[hex]:      0x74
  Sync/Async:           Synchronous
  Reentrancy:           Non Reentrant
  Parameters (in):      None
  Parameters (inout):   None
  Parameters (out):     None
  Return value:         Std_ReturnType          RTE_E_OK: No error occurred.
                                                RTE_E_LIMIT: An internal limit has been exceeded.
                                                The allocation of a required resource has failed.
  Description:          Rte_RestartPartition is intended to notify the RTE that a given partition
                        will be restarted.
5.8.5.1 Signature
[SWS_Rte_07188] d
Std_ReturnType Rte_RestartPartition_<PID>(void)
Where <PID> is the name of the EcucPartition according to the ECU Configuration
Description [5]. c(SRS_Rte_00224)
5.8.5.2 Existence
5.8.5.3 Description
5.8.5.5 Notes
5.8.6 Rte_Init
5.8.6.1 Signature
[SWS_Rte_06749] d
void Rte_Init_<InitContainer>(void)
5.8.6.2 Existence
5.8.6.3 Description
none
5.8.6.5 Notes
5.8.7 Rte_StartTiming
5.8.7.1 Signature
[SWS_Rte_06754] d
void Rte_StartTiming(void)
c(SRS_Rte_00240)
5.8.7.2 Existence
5.8.7.3 Description
none
5.8.7.5 Notes
The COM signals used for communication are defined in the input information provided
by Com.
[SWS_Rte_03007] d The RTE shall initiate an inter-ECU transmission using the COM
API with the handle id of the corresponding COM signal for primitive data element
SenderReceiverToSignalMapping. c(SRS_Rte_00019)
[SWS_Rte_03008] d The RTE shall initiate an inter-ECU transmission using the COM
API with the handle id of the corresponding COM signal group for composite data
elements or operation arguments SenderReceiverToSignalGroupMapping. c
(SRS_Rte_00019)
Purpose:           Implement the call-back functions that AUTOSAR COM / LdCom in-
                   vokes as a result of inter-ECU communication, where:
                      A data item/event is ready for reception by a receiver.
                      A transmission acknowledgment shall be routed to a sender.
                      An operation shall be invoked by a server.
                      The result of an operation is ready for reading by a client.
Signature:         [SWS_Rte_03000] d
                   void <CallbackRoutineName> (void);
                   c(SRS_Rte_00019)
                   Where <CallbackRoutineName> is the name of the call-back func-
                   tion.
Description:       Prototypes for the call-back <CallbackRoutineName> provided by
                   AUTOSAR COM / LdCom.
Return Value:      No return value : void
In the following sections, the naming convention of <CallBackRoutineName> are
defined:
5.9.2.1.1 Rte_COMCbk_<sn>
[SWS_Rte_03001] d
void Rte_COMCbk_<sn>(void)
5.9.2.1.2 Rte_COMCbkTAck_<sn>
[SWS_Rte_03002] d
void Rte_COMCbkTAck_<sn>(void)
5.9.2.1.3 Rte_COMCbkTErr_<sn>
   Description:          This callback function indicates that an error occurred when the signal
                         of the primitive data item/event was handed over by COM to the PDU
                         router.
[SWS_Rte_03775] d
void Rte_COMCbkTErr_<sn>(void)
5.9.2.1.4 Rte_COMCbkInv_<sn>
[SWS_Rte_02612] d
void Rte_COMCbkInv_<sn>(void)
5.9.2.1.5 Rte_COMCbkRxTOut_<sn>
[SWS_Rte_02610] d
void Rte_COMCbkRxTOut_<sn>(void)
5.9.2.1.6 Rte_COMCbkTxTOut_<sn>
[SWS_Rte_05084] d
void Rte_COMCbkTxTOut_<sn>(void)
5.9.2.1.7 Rte_COMCbk_<sg>
[SWS_Rte_03004] d
void Rte_COMCbk_<sg>(void)
where <sg> is the name of the COM signal group, which contains all the signals of the
composite data item/event or an operation. c(SRS_Rte_00019)
This callback function indicates that the signals of the composite data item/event or the
arguments of an operation are ready for reception.
Configured in Com: ComNotification [ECUC_Com_00498] as part of ComSig-
nalGroup
5.9.2.1.8 Rte_COMCbkTAck_<sg>
[SWS_Rte_03005] d
void Rte_COMCbkTAck_<sg>(void)
where <sg> is the name of the COM signal group, which contains all the signals of the
composite data item/event or an operation. c(SRS_Rte_00019, SRS_Rte_00122)
TAck is literal text indicating transmission acknowledgment. This callback function
indicates that the signals of the composite data item/event is already handed over by
COM to the PDU router.
Configured in Com: ComNotification [ECUC_Com_00498] as part of ComSig-
nalGroup
5.9.2.1.9 Rte_COMCbkTErr_<sg>
[SWS_Rte_03776] d
void Rte_COMCbkTErr_<sg>(void)
where <sg> is the name of the COM signal group, which contains all the signals of the
composite data item/event or an operation. c(SRS_Rte_00019, SRS_Rte_00122)
TErr is literal text indicating transmission error. This callback function indicates that
an error occurred when the signal of the composite data item/event was handed over
by COM to the PDU router.
Configured in Com:       ComErrorNotification [ECUC_Com_00499] as part of
ComSignalGroup
5.9.2.1.10 Rte_COMCbkInv_<sg>
[SWS_Rte_05065] d
void Rte_COMCbkInv_<sg>(void)
where <sg> is the name of the COM signal group, which contains all the signals of the
composite data item/event or an operation. c(SRS_Rte_00019, SRS_Rte_00122)
Inv is literal text indicating signal group invalidation. This callback function indicates
that COM has received a signal group and parsed it as invalid.
Configured in Com: ComInvalidNotification [ECUC_Com_00315] as part of
ComSignalGroup
5.9.2.1.11 Rte_COMCbkRxTOut_<sg>
[SWS_Rte_02611] d
void Rte_COMCbkRxTOut_<sg>(void)
where <sg> is the name of the COM signal group, which contains all the signals of the
composite data item/event or an operation. c(SRS_Rte_00019, SRS_Rte_00147)
RxTOut is literal text indicating reception signal time out. This callback function indi-
cates that the aliveTimeout after the last successful reception of the signal group
carrying the composite data item has expired (data element outdated).
Configured in Com: ComTimeoutNotification [ECUC_Com_00552] as part of
ComSignalGroup
5.9.2.1.12 Rte_COMCbkTxTOut_<sg>
[SWS_Rte_05085] d
void Rte_COMCbkTxTOut_<sg>(void)
where <sg> is the name of the COM signal group, which contains all the signals of the
composite data item/event or an operation. c(SRS_Rte_00019, SRS_Rte_00122)
TxTOut is literal text indicating transmission failure and time out. This callback func-
tion indicates that the timeout of TransmissionAcknowledgementRequest for
sending the signal group of the composite data item/event has expired.
Configured in Com: ComTimeoutNotification [ECUC_Com_00552] as part of
ComSignalGroup
5.9.2.2.1 Rte_LdComCbkRxIndication_<sn>
[SWS_Rte_01395] d
void Rte_LdComCbkRxIndication_<sn> (
        IN const PduInfoType* info
);
5.9.2.2.2 Rte_LdComCbkStartOfReception_<sn>
[SWS_Rte_01396] d
BufReq_ReturnType Rte_LdComCbkStartOfReception_<sn> (
IN const PduInfoType* SduInfoPtr,
IN PduLengthType SduLength,
5.9.2.2.3 Rte_LdComCbkCopyRxData_<sn>
[SWS_Rte_01400] d
BufReq_ReturnType Rte_LdComCbkCopyRxData_<sn> (
IN const PduInfoType* SduInfoPtr,
OUT PduLengthType* RxBufferSizePtr
)
5.9.2.2.4 Rte_LdComCbkTpRxIndication_<sn>
[SWS_Rte_01403] d
void Rte_LdComCbkTpRxIndication_<sn> (
IN Std_ReturnType Result
)
5.9.2.2.5 Rte_LdComCbkCopyTxData_<sn>
[SWS_Rte_01404] d
BufReq_ReturnType Rte_LdComCbkCopyTxData_<sn> (
IN const PduInfoType* SduInfoPtr,
IN RetryInfoType* RetryInfoPtr,
OUT PduLengthType* TxDataCntPtr
)
It is configured in LdCom:
LdComTxCopyTxData [ECUC_LdCom_00018] as part of LdComIPdu
[SWS_Rte_01405] d The Rte_LdComCbkCopyTxData_<sn> Call back shall return
BUFREQ_OK when data has been copied to the receive buffer completely as requested.
c(SRS_Rte_00246)
[SWS_Rte_01406] d The Rte_LdComCbkCopyTxData_<sn> Call back shall return
BUFREQ_E_NOT_OK when data has not been copied to the receive buffer completely
as requested. c(SRS_Rte_00246)
Possible Request failure are:
    in case the provided I-PDU ID is wrong
    in case the corresponding I-PDU is stopped
    in case the RetryInfoPtr->TpDataState is TP_DATARETRY and the offset
     RetryInfoPtr->TxTpDataCnt exceeds the current position
5.9.2.2.6 Rte_LdComCbkTpTxConfirmation_<sn>
[SWS_Rte_01407] d
void Rte_LdComCbkTpTxConfirmation_<sn> (
IN Std_ReturnType Result
)
5.9.2.2.7 Rte_LdComCbkTriggerTransmit_<sn>
[SWS_Rte_01408] d
Std_ReturnType Rte_LdComCbkTriggerTransmit_<sn> (
PduInfoType* PduInfoPtr
)
5.9.2.2.8 Rte_LdComCbkTxConfirmation_<sn>
[SWS_Rte_01411] d
void Rte_LdComCbkTxConfirmation_<sn> (
Std_ReturnType result
)
5.9.3.1 Rte_SetMirror
5.9.3.2 Rte_GetMirror
5.9.3.3 Rte_NvMNotifyJobFinished
5.9.3.4 Rte_NvMNotifyInitBlock
The specification of the RTE requires the usage of the following COM API functions.
 Com API function                     Context
 Com_SendSignal                       to transmit a data element of primitive type using COM.
 Com_SendDynSignal                    to transmit a data element of primitive dynamic type
                                      uint8[n] using COM.
 Com_ReceiveSignal                    to retrieve the new value of a data element of primitive
                                      type from COM.
 Com_ReceiveDynSignal                 to retrieve the new value of a data element of primitive
                                      dynamic type uint[8] from COM.
 Com_SendSignalGroup                  to initiate sending of a data element of composite type
                                      using COM.
 Com_ReceiveSignalGroup               to retrieve the new value of a data element of composite
                                      type from COM.
 Com_InvalidateSignal                 to invalidate a data element of primitive type using COM.
 Com_InvalidateSignalGroup            to invalidate a whole signal group using COM.
 Com_SendSignalGroupArray             to initiate sending of a data element of composite type
                                      using COM array based signal group API.
 Com_ReceiveSignalGroup               to retrieve the new data element of composite type using
 Array                                COM array based signal group API.
Please note that [SWS_Rte_02761] may require to access COM through the use of
call trusted function in a partitioned system.
The specification of the RTE requires the usage of the following LdCom API functions.
 LdCom API function                   Context
 LdCom_Transmit                       to transmit a data element of primitive type or uint8[n]
                                      using LdCom API.
Please note that [SWS_Rte_02761] may require to access LdCom through the use of
call trusted function in a partitioned system.
The usage of APIs provided by the Os module [4] is up to the implementation of a spe-
cific RTE Generator, System description and Ecu configuration. In general a RTE may
utilize any standardized API. Therefore no dedicated list of expected APIs is specified
here.
In case of multi-core the RTE may utilize the IOC-Module [4] to implement the inter-
core communication. The IOC-Module is specified to be part of the Os. Therefore no
specific APIs are listed here.
The specification of the RTE requires the usage of the following Transformer API func-
tions.
 Transformer API function            Context
 <Mip>_<transformerId>               API of a transformer on the sending/calling side
                                     of the communcation.   The name pattern follows
                                     [SWS_Xfrm_00062].
 <Mip>_Inv_<transformerId>           API of a transformer on the receiving/called side
                                     of the communcation.   The name pattern follows
                                     [SWS_Xfrm_00062].
Please note that the exact names of the API depend on the EcuC of the respective
transformer module.
The EcuC of a transformer module contains a mapping from the transformer and
ISignal or ISignalGroup with the to the BswModuleEntry which implements this
specific transformer. (See [ECUC_Xfrm_00001].
This mapping can be used by the RTE to determine which BswModuleEntry shall be
executed by the RTE for a specific transformer.
The specification of the RTE requires the usage of the following NvM API functions.
 NvM API function                    Context
 NvM_SetBlockProtection              to set/reset the write protection for a NV block
 NvM_EraseBlock                      to erase a NV block.
 NvM_GetDataIndex                    to get the currently set DataIndex of a dataset NVRAM
                                     block.
 NvM_GetErrorStatus                  to read the block dependent error/status information.
 NvM_InvalidateNvBlock               to invalidate a NV block.
The VFB Tracing mechanism is designed to offer a lightweight means to monitor the
interactions of AUTOSAR software-components with the VFB.
The VFB tracing in debug build is implemented by a series of hook functions that
are invoked automatically by the generated RTE when interesting events occur. Each
hook function corresponds to a single event.
The supported trace events are defined in Section 5.11.5. A mechanism is described in
Section 5.11.6 for configuring which of the many potential trace events are of interest.
The VFB Tracing mechanism is designed to support multiple clients for each trace
event.
[SWS_Rte_05093] d For each RteVfbTraceClientPrefix configured in the RTE
Configuration input each Trace Event shall be generated using that client prefix
in the optional <client> position of the API function name. c(SRS_Rte_00005,
SRS_Rte_00008, SRS_Rte_00192)
[SWS_Rte_05091] d The RTE Generator shall provide each Trace Event without a
client prefix. c(SRS_Rte_00005, SRS_Rte_00008, SRS_Rte_00192)
The generation of Trace Events without a client prefix ensures compatibility of the trace
events with previous RTE releases.
[SWS_Rte_05092] d In case of multiple clients for one Trace Event the individual trace
functions shall be called in the following order:
  1. The trace function without client prefix.
  2. The trace functions with client prefix in alphabetically ascending order of the
     RteVfbTraceClientPrefix (ASCII / ISO 8859-1).
c(SRS_Rte_00005, SRS_Rte_00008, SRS_Rte_00192)
The calling order specification ensures a deterministic execution of the multiple clients.
One example of the usage of client prefix is the parallel usage of Debugging and Diag-
nostic Log and Trace [33]. In this example two RteVfbTraceClientPrefix would
be specified:
    Dbg
    Dlt
This shall result in the declaration of three trace functions for the one Trace Event
Rte_[<client>_]Task_Activate(TaskType task):
    Rte_Task_Activate(TaskType task)
    Rte_Dbg_Task_Activate(TaskType task)
    Rte_Dlt_Task_Activate(TaskType task)
These trace functions (if all used in one project) will be called in the following order:
  1. Rte_Task_Activate(TaskType task)
  2. Rte_Dbg_Task_Activate(TaskType task)
  3. Rte_Dlt_Task_Activate(TaskType task)
The RTE Generator in Generation Phase shall also update its Basic Software Module
Description ([SWS_Rte_05086]) in order to document the possibly traceable functions
and their signatures.
[SWS_Rte_05106] d For each generated hook function - including multiple trace clients
([SWS_Rte_05093]) - an entry in the Basic Software Module Description shall be
entered describing the hook function and its signature. The outgoingCallback
element of BswModuleDescription shall be used to capture the information. c
(SRS_Rte_00005, SRS_Rte_00192)
RTE API trace events occur when an AUTOSAR software-component interacts with the
generated RTE API. For implicit S/R communication, however, tracing is not supported.
Description:       RTE API Start is invoked by the RTE when an API call is made by a
                   component.
Signature:         [SWS_Rte_01238] d
                   void Rte_[<client>_]<api>Hook_<cts>_<ap>_Start
                        ([const struct Rte_CDS_<cts>*, ]<param>)
Description:      RTE API Return is a trace event that is invoked by the RTE just before
                  an API call returns control to a component.
Signature:        [SWS_Rte_01239] d
                  void Rte_[<client>_]<api>Hook_<cts>_<ap>_Return
                       ([const struct Rte_CDS_<cts>*, ]<param>)
BSW Scheduler API trace events occur when an AUTOSAR Basic Software Module
interacts with the generated BSW Scheduler API.
Description:       BSW Scheduler API Start is invoked by the BSW Scheduler when an
                   API call is made by a Basic Software Module.
Signature:         [SWS_Rte_04531] d
                   void SchM_[<client>_]<api>Hook_<bnsp>_[<vi>_<ai>]_
                                            <name>_Start(<param>)
                   Where <api> is the BSW Scheduler API Name (Send, Call, etc.),
                   <bsnp> is the BSW Scheduler Name              Prefix   according
                   [SWS_Rte_07593] and [SWS_Rte_07594],
                   <vi> is the vendorId of the BSW module,
                   <ai> is the vendorApiInfix of the BSW module and
                   <name> is the name provided by the API (e.g. shortName of the
                   VariableDataPrototype of a sender-receiver connection).
                   The parameters of the API shall be the same as the corresponding
                   BSW Scheduler API.
                   The sub part in square brackets [_<vi>_<ai>] is omitted if no
                   vendorApiInfix is defined for the Basic Software Module. See
                   ([SWS_Rte_07528]).
                   c(SRS_Rte_00003, SRS_Rte_00004, SRS_Rte_00045)
Description:       BSW Scheduler API Return is invoked by the BSW Scheduler just
                   before an API call returns control to a Basic Software Module.
Signature:         [SWS_Rte_04532] d
                   void SchM_[<client>_]<api>Hook_<bnsp>_[<vi>_<ai>]_
                                            <name>_Return(<param>)
                   Where <api> is the BSW Scheduler API Name (Send, Call, etc.),
                   <bsnp> is the BSW Scheduler Name              Prefix   according
                   [SWS_Rte_07593] and [SWS_Rte_07594],
                   <vi> is the vendorId of the BSW module,
COM trace events occur when the generated RTE interacts with the AUTOSAR com-
munication service.
OS trace events occur when the generated RTE interacts with the AUTOSAR operating
system.
Description:       A trace event that is invoked by the RTE immediately prior to the
                   activation of a task containing runnable entities.
Signature:         [SWS_Rte_01243] d
                   void Rte_[<client>_]Task_Activate(TaskType task)
Signature:        [SWS_Rte_06032] d
                  void Rte_[<client>_]Task_Terminate(TaskType task)
Description:      A trace event invoked immediately before generated RTE code at-
                  tempts to set an OS Event.
Signature:        [SWS_Rte_01245] d
                  void Rte_[<client>_]Task_SetEvent(TaskType task,
                                                    EventMaskType ev)
                  Where task is the OSs handle for the task for which the event is
                  being set and ev the OS event mask. c(SRS_Rte_00045)
                  Where task is the OSs handle for the task (that is waiting for the
                  event) and ev the OS event mask. c(SRS_Rte_00045)
Description:      Invoked immediately after generated RTE code returns from waiting
                  on an event.
Signature:        [SWS_Rte_01247] d
                  void Rte_[<client>_]Task_WaitEventRet(TaskType task,
                                                        EventMaskType ev)
                  Where task is the OSs handle for the task (that was waiting for
                  an event) and ev the event mask indicating the received event. c
                  (SRS_Rte_00045)
Note that not all of the trace events listed above may be available for a given input
configuration. For example if a task is activated by a schedule table, it is activated by
the OS rather than by the RTE, hence no trace hook function for task activation can be
invoked by the RTE.
Description:        Event invoked by the RTE just before execution of runnable entry
                    starts via its entry point. This trace event occurs after any copies of
                    data elements are made to support the Rte_IRead API Call.
Signature:          [SWS_Rte_01248] d
                    void Rte_[<client>_]Runnable_<cts>_<reName>_Start
                         ([const RTE_CDS_<cts>*])
purpose:            Event invoked by the RTE immediately execution returns to RTE code
                    from a runnable entity. This trace event occurs before any write-back
                    of data elements are made to support the Rte_IWrite API Call.
Signature:          [SWS_Rte_01249] d
                    void Rte_[<client>_]Runnable_<cts>_<reName>_Return
                         ([const Rte_CDS_<cts>*])
BSW Schedulable entity trace events occur when a BSW Schedulable entity is started.
Description:        Event invoked by the BSW Scheduler just before execution of BSW
                    Schedulable entry starts via its entry point.
Signature:          [SWS_Rte_04533] d
                    void SchM_[<client>_]Schedulable_<bnsp>[_<vi>_<ai>]
                                _<entityName>_Start
                         (void)
                    Where
                    <bsnp> is the BSW Scheduler Name                   Prefix   according
                    [SWS_Rte_07593] and [SWS_Rte_07594],
                    <vi> is the vendorId of the BSW module,
                    <ai> is the vendorApiInfix of the BSW module and
                    <entityName> is the name of the BSW Schedulable Entity or BSW
                    Callable Entity.
                    The sub part in square brackets [_<vi>_<ai>] is omitted if no
                    vendorApiInfix is defined for the Basic Software Module. See
                    ([SWS_Rte_07528]).
                    c(SRS_Rte_00045)
Description:        Event invoked by the BSW Scheduler immediately after execution re-
                    turns to BSW Scheduler code from a BSW Schedulable Entity.
Signature:          [SWS_Rte_04534] d
                    void SchM_[<client>_]Schedulable_<bnsp>[_<vi>_<ai>]
                               _<entityName>_Return(void)
Where
5.11.5.7.1 Transmission
5.11.5.7.2 Reception
Description:      Event invoked by the RTE immediately before the received value is
                  copied from the RP global buffer to the RTE APIs OUT param-
                  eter or return value. Placing the VFB trace hook at this position en-
                  sures that any conditional writes to the RP global buffer gov-
                  erned by RP enabler flag will have taken effect.
                  The event takes as parameter a reference to the RP global
                  buffer allowing the VFB trace hook to both monitor and influence
                  the value.
Signature:        [SWS_Rte_06114] d
                  void Rte_[<client>_]RptHook_<cts>_<var>_Reception
                       ([const RTE_CDS_<cts>*], <type>* <buffer> )
5.11.6 Configuration
The VFB tracing mechanism works by the RTE invoking the tracepoint hook function
whenever the tracing event occurs.
The support trace events and their hook function name and signature are defined in
Section 5.11.5. There are many potential trace events and it is likely that only a few will
be of interest at any one time. Therefore The RTE generator supports a mechanism to
configure which trace events are of interest.
In order to minimize RTE Overheads, trace events that are not enabled should have
no run-time effect on the generated system. This is achieved through generated code
within the VFB Tracing Header File (see Section 5.3.7) and the user supplied definitions
from the RTE Configuration Header file (see Section 5.3.8).
The definition of trace event hook functions is contained within user code. If a defini-
tion is encapsulated within a #if block, as follows, the definition will automatically be
omitted when the trace event is disabled.
   1   #if !defined(<trace event>)
   2   void <trace event>(<params>)
   3   {
   4     /* Function definition */
   5   }
   6   #endif
The configuration of which individual trace events are enabled is entirely under the
control of the user via the definitions included in the RTE Configuration header file.
[SWS_Rte_08000] d When RteVfbTrace is set to "true", a user shall be able to enable
any hook function in the RTE Configuration header file, regardless of whether it was
not enabled in the RTE configuration with a RteVfbTraceFunction parameter. c
(SRS_Rte_00005, SRS_Rte_00008)
VFB tracing is only available during the RTE Generation or Basic Software Scheduler
Generation phase [SWS_Rte_01319] and therefore hook functions never appear in an
application header or in a Module Interlink Header file created during RTE Contract
resp. Basic Software Scheduler Contract phase. However, object-code software-
components and / or Basic Software Modules are compiled against the RTE Contract
resp. Basic Software Scheduler Contract phase headers and can therefore only trace
events that are inserted into the generated RTE. In particular they cannot trace events
that require invocation of hook functions to be inserted into the API mapping such as
the Rte_Pim API. However, many trace events are applicable to object-code software-
components including trace events related to the explicit communication API, to task
activity and for runnable entity start and stop.
This approach means that the external interactions of the object-code software-
component can be monitored without requiring modification of the delivered object-
code and without revealing the internal activity of the software-component. The ap-
proach is therefore considered to be consistent with the desire for IP protection that
prompts delivery of a software-component as object-code. Finally, tracing can easily
be disabled for a production build without invalidating tests of the object-code software-
component.
6.1     Scope
This chapter presents the Basic Software Scheduler API from the perspective of AU-
TOSAR Basic Software Module  these API is not applicable for AUTOSAR software-
components.
Section 6.2 presents basic principles of the API including naming conventions and
supported programming languages. Section 6.3 describes the header files used by
the Basic Software Scheduler and the files created by an RTE generator. The data
types used by the API are described in Section 6.4 and Sections 6.5 and 6.6 provide
a reference to the Basic Software Scheduler API itself including the definition of Basic
Software Module Entities.
The Basic Software Scheduler is interleaved with the scheduling part of the RTE. Fur-
ther on it is generated by the RTE Generator together with the RTE so Basic Software
Scheduler and RTE can not be separated if both are generated. Therefore the Basic
Software Scheduler uses the namespace of the RTE for internal symbols, variables
and functions, see [SWS_Rte_01171].
The only exceptions are defines, data types and functions belonging to the interface of
the Basic Software Scheduler. These are explicitly mentioned in the specification.
[SWS_Rte_07284] d All Basic Software Scheduler symbols (e.g. function names, data
types, etc.) belonging to the Basic Software Scheduler s interfaces are required to use
the SchM_ prefix. c(SRS_BSW_00307, SRS_BSW_00300, SRS_Rte_00055)
In case of Basic Software Modules supporting multiple instances of the same Ba-
sic Software Module the name space of the BswSchedulableEntitys and the
Basic Software Scheduler API related to one instance of a Basic Software Mod-
ule is extended by the vendorId and the vendorApiInfix. See document [12]
[SRS_BSW_00347]. In the following chapters this optional part is denoted by usage of
squared brackets [_<vi>_<ai>].
[SWS_Rte_07528] d If the attribute vendorApiInfix exists for a Basic Software
Module, the RTE generator shall insert the vendorId (<vi>) and the vendorApi-
Infix (<ai>) with leading underscores where it is denoted by [_<vi>_<ai>]. c
(SRS_BSW_00347)
Since the Basic Software Module Description supports the description of BSW Module
Clusters one Basic Software Module Description can contain the content of several
BSW Modules. In order to fulfill the Standardized Interfaces with the cluster interface
different ICC3 Module abbreviations [9] inside one cluster can occur. For the Basic
Software Scheduler the Module abbreviation is used as BSW Scheduler Name Prefix
in the SchM API. Nevertheless the shortName of the BswModuleDescription can
as well describe the BSW Scheduler Name Prefix and Section Name Prefix
in order to provide one common prefix in case of ICC3 modules.
In the Meta Model Module abbreviations relevant for the Schedule Manager API are
explicitly expressed with the meta class BswSchedulerNamePrefix. Further infor-
mation can be found in document [9].
                   AtpStructureElement                                                                    Identifiable
                 InternalBehavior                  +exclusiveArea                    ExclusiveArea
                                                              0..*
                                      atpVariation,atpSplitable
                                                                                                                    Identifiable
                                                                                           ExecutableEntity
                                                                                                                                   +executableEntity
                                                                     +   minimumStartInterval :TimeValue
                                                                                                                     0..*
                                                                     +   reentrancyLevel :ReentrancyLevelEnum [0..1]
                                                                                                                                                                    ARElement
                BswInternalBehavior                                                  BswModuleEntity                +implementedEntry
                                                                                                                                                                   AtpBlueprint
                                                                                                                                        1                      AtpBlueprintable
                                                                                                                                                       BswModuleEntry
                                                                                                                              +calledEntry
                                                                     +entity
                                                                                                                      atpVariation 0..*
                                             atpVariation,atpSplitable
                                                                      0..*
                                                                                                                          +issuedTrigger                    AtpStructureElement
                                                                                                                                                                     Identifiable
                                                                                                                      atpVariation 0..*
                                                                                                                                                          Trigger
                                                                                                                                                                     atpVariation
                                                                                                                                        atpVariation
                                                                 +schedulerNamePrefix            0..1                 +accessedModeGroup        0..*+managedModeGroup         0..*
                                                                                                                                                                    AtpPrototype
                                                                                BswSchedulerNamePrefix
                                                    +schedulerNamePrefix                                                                     ModeDeclarationGroupPrototype
                                            atpVariation,atpSplitable
                                                                      0..*
+behavior 1
                                                                                                   Referrable
                BswImplementation
                                                                                    ImplementationProps
     +   arReleaseVersion :RevisionLabelString
                                                                                +   symbol :CIdentifier
     +   vendorApiInfix :Identifier [0..1]
                                    ARElement
                  Implementation
                  atpSplitable
    +resourceConsumption 1                                                          SectionNamePrefix
                                    Identifiable       +sectionNamePrefix
               ResourceConsumption                     atpVariation 0..*
+prefix 0..1
                                                                                                               Identifiable
                                                     +memorySection                        MemorySection
                                             atpVariation,atpSplitable
                                                                0..* +         alignment :AlignmentType [0..1]
                                                                      +        memClassSymbol :CIdentifier [0..1]
                                                                      +        option :Identifier [0..*]
                                                                      +        size :PositiveInteger [0..1]
                                                                      +        symbol :Identifier [0..1]
In several requirements of this specification the Module Prefix is required and deter-
mined as follows:
[SWS_Rte_07593] d The BSW Scheduler Name Prefix <bsnp> of the calling
BSW module shall be derived from the BswModuleDescription shortName if no
BswSchedulerNamePrefix is defined for the BswModuleEntity using the related
Basic Software Scheduler API. c(SRS_Rte_00148, SRS_Rte_00149)
[SWS_Rte_07594] d The BSW Scheduler Name Prefix <bsnp> shall be the value
of the symbol attribute of the BswSchedulerNamePrefix of the BswModuleEn-
tity if a BswSchedulerNamePrefix is defined for the BswModuleEntity using
the related Basic Software Scheduler API. c(SRS_Rte_00148, SRS_Rte_00149)
Further on the Memory Mapping inside one cluster can either keep or abolish the ICC3
borders. For some cases (e.g. Entry Point Prototype) the RTE has to know the used
prefixes for the Memory Allocation Keywords as well.
In the Meta Model these prefixes are expressed with the meta class Section-
NamePrefix. Further information can be found in document [9].
[SWS_Rte_07595] d The Section Name Prefix <snp> shall be the module ab-
breviation (in uppercase letters) of the BSW module derived from the BswMod-
uleDescriptions shortName if no SectionNamePrefix is defined for the
BswModuleEntity implementing the related BswModuleEntry. c(SRS_Rte_00148,
SRS_Rte_00149)
[SWS_Rte_07596] d The Section Name Prefix <snp> shall be the symbol of the
SectionNamePrefix of the MemorySection associated to the BswModuleEn-
tity implementing the related BswModuleEntry if a SectionNamePrefix is de-
fined for the BswModuleEntity implementing the related BswModuleEntry. c
(SRS_Rte_00148, SRS_Rte_00149)
For instance the following input configuration
+internalBehavior
                   MEM :                                                                   +entity
             BswInternalBehavior                                                                        NvM_MainFunction :
                                                                                                       BswSchedulableEntity
+executableEntity
                                                                                           +entity
                                                                                                         NvM_WriteBlock :
                                                                                                         BswCalledEntity
                                                    +schedulerNamePrefix        +executableEntity
                                            +schedulerNamePrefix
                                                                NvM :
                                   +schedulerNamePrefix BswSchedulerNamePrefix
                                                           symbol = NvM
                                                                                           +entity       MemIf_SetMode :
                                                                                                          BswCalledEntity
                                                                                +executableEntity
                                              +schedulerNamePrefix
                                                               MemIf :
                                   +schedulerNamePrefix BswSchedulerNamePrefix
                                                                                                                       +swAddrMethod
                                                                                                                    +swAddrMethod
                                                           symbol = MemIf                                        +swAddrMethod
             +behavior
                                                                                                                              CODE :SwAddrMethod
sectionType = code
                 MEM :                                                                                           +swAddrmethod
            BswImplementation                                                                                        +swAddrmethod
+resourceConsumption
                   MEM :                                                                         CODE_MEMIF :
                                                                              +memorySection
            ResourceConsumption                                                                  MemorySection                          MEMIF_START_SEC_CODE
                                                                                                                                        MEMIF_STOP_SEC_CODE
                                                                                                     symbol = CODE
                                                           MEMIF_PART :          +prefix
                                     +sectionNamePrefix   SectionNamePrefix
symbol = MEMIF
                                                                                            CODE_NVM :
                                                                      +memorySection       MemorySection
                                                                                                                                        NVM_START_SEC_CODE
                                                                                            symbol = CODE                               NVM_STOP_SEC_CODE
                                                            NVM_PART :
                                     +sectionNamePrefix                          +prefix
                                                          SectionNamePrefix
symbol = NVM
The Module Interlink Types Header defines specific types related to this basic software
module derived either from the input configuration or from the RTE / Basic Software
Scheduler implementation.
[SWS_Rte_07503] d The RTE generator shall create a Module Interlink Types Header
File for each BswSchedulerNamePrefix in the BswInternalBehavior of each
BswImplementation referencing such BswInternalBehavior defined in the in-
put. c(SRS_BSW_00415)
For instance a input configuration with two BswImplementations (typical with dif-
ferent API infix) referencing a BswInternalBehavior with three BswScheduler-
NamePrefixes would result in the generation of six Module Interlink Types Header
Files.
[SWS_Rte_07295] d The name of the Module Interlink Types Header File shall be
formed in the following way:
SchM_<bsnp>_[<vi>_<ai>]Type.h
Where here
<bsnp> is the BSW Scheduler Name Prefix according [SWS_Rte_07593] and
[SWS_Rte_07594],
<vi> is the vendorId of the BSW module and
<ai> is the vendorApiInfix of the BSW module.
The sub part in squared brackets [<vi>_<ai>] is omitted if no vendorApiInfix is
defined for the Basic Software Module. See [SWS_Rte_07528]. c(SRS_BSW_00415,
SRS_BSW_00300, SRS_BSW_00347)
Example 6.1
The concatenation of the basic software module prefix (which has to be equally with
the short name of the basic software module description) and the vendor API infix is
required to support the separation of several basic software module instances. In dif-
ference to the multiple instantiation concept of software components, where the same
component code is used for all component instances, basic software modules are mul-
tiple instantiated by creation of own code per instance in a different name space.
6.3.1.2 Scope
[SWS_Rte_07297] d The Module Interlink Types Header shall be valid for both C and
C++ source. c(SRS_Rte_00126, SRS_Rte_00138)
Requirement [SWS_Rte_07297] is met by ensuring that all definitions within the Appli-
cation Types Header File are defined using C linkage if a C++ compiler is used.
[SWS_Rte_07298] d All definitions within in the Module Interlink Types Header File
shall be preceded by the following fragment:
   1    #ifdef __cplusplus
   2    extern "C" {
   3    #endif /* __cplusplus */
c(SRS_Rte_00126, SRS_Rte_00138)
[SWS_Rte_07299] d All definitions within the Module Interlink Types Header shall be
suffixed by the following fragment:
   1    #ifdef __cplusplus
   2    } /* extern "C" */
   3    #endif /* __cplusplus */
c(SRS_Rte_00126, SRS_Rte_00138)
[SWS_Rte_07500] d The Module Interlink Types Header shall include the RTE Types
Header File. c(SRS_BSW_00415)
The name of the RTE Types Header File is defined in Section 5.3.4.
The Module Interlink Types Header File shall contain identifiers for the ModeDeclara-
tions and type definitions for ModeDeclarationGroups as defined in Chapter 6.4.2
The Module Interlink Header defines the Basic Software Scheduler API and any asso-
ciated data structures that are required by the Basic Software Scheduler implementa-
tion. But the Module Interlink Header file is not allowed to create objects in memory.
[SWS_Rte_07501] d The RTE generator shall create a Module Interlink Header File for
each BswSchedulerNamePrefix in the BswInternalBehavior of each BswIm-
plementation referencing such BswInternalBehavior defined in the input.c
(SRS_BSW_00415)
[SWS_Rte_CONSTR_09059] Usage of Basic Software Scheduler API prerequi-
sites the include of the Module Interlink Header File d Each BSW module imple-
mentation shall include its Module Interlink Header File if it uses Basic Software Sched-
uler API or if it implements BswSchedulableEntitys. c()
[SWS_Rte_07502] d The Module Interlink Header File shall not contain code that cre-
ates objects in memory. c(SRS_BSW_00308)
[SWS_Rte_07504] d
The name of the Module Interlink Header File shall be formed in the following way:
   1      SchM_<bsnp>[_<vi>_<ai>].h
Where here
<bsnp> is the BSW Scheduler Name Prefix according [SWS_Rte_07593] and
[SWS_Rte_07594],
<vi> is the vendorId of the BSW module and
<ai> is the vendorApiInfix of the BSW module.
The sub part in squared brackets [_<vi>_<ai>] is omitted if no vendorApiInfix
is defined for the Basic Software Module. c(SRS_BSW_00415, SRS_BSW_00300,
SRS_BSW_00347)
Example 6.2
                 <BEHAVIOR-REF DEST="BSW-INTERNAL-BEHAVIOR">/CanDriver/Can/
                    YesWeCan</BEHAVIOR-REF>
                 <VENDOR-API-INFIX>Dev0815</VENDOR-API-INFIX>
               </BSW-IMPLEMENTATION>
             </ELEMENTS>
           </AR-PACKAGE>
The concatenation of the basic software module prefix (which has to be equally with
the short name of the basic software module description) and the vendorApiInfix
is required to support the separation of several basic software module instances. In dif-
ference to the multiple instantiation concept of software components, where the same
component code is used for all component instances, basic software modules are mul-
tiple instantiated by creation of own code per instance in a different name space.
6.3.2.2 Scope
[SWS_Rte_07505] d The Module Interlink Header for a component shall contain dec-
larations relevant for that instance of a basic software module. c(SRS_BSW_00415)
Requirement [SWS_Rte_07505] means that compile time checks ensure that a Module
Interlink Header File that uses the Module Interlink Header File only accesses the
generated data types to which it has been configured. The use of data types which are
not used by the basic software module, will fail with a compiler error [SRS_Rte_00017].
[SWS_Rte_07506] d The Module Interlink Header File shall include the Module Inter-
link Types Header File. c(SRS_BSW_00415)
The name of the Module Interlink Types Header File is defined in Section 6.3.1.
[SWS_Rte_07507] d The Module Interlink Header shall be valid for both C and C++
source. c(SRS_Rte_00126, SRS_Rte_00138)
Requirement [SWS_Rte_07507] is met by ensuring that all definitions within the Appli-
cation Types Header File are defined using C linkage if a C++ compiler is used.
[SWS_Rte_07508] d All definitions within in the Module Interlink Header File shall be
preceded by the following fragment:
   1   #ifdef __cplusplus
   2   extern "C" {
   3   #endif /* __cplusplus */
c(SRS_Rte_00126, SRS_Rte_00138)
[SWS_Rte_07509] d All definitions within the Module Interlink Header File shall be
suffixed by the following fragment:
   1   #ifdef __cplusplus
   2   } /* extern "C" */
   3   #endif /* __cplusplus */
c(SRS_Rte_00126, SRS_Rte_00138)
The Module Interlink Header File also includes a prototype for each BswSchedula-
bleEntitys entry point ([SWS_Rte_04542]).
The Module Interlink Header File defines the interface between a Basic Soft-
ware Module and the Basic Software Scheduler. The interface consists of the Ba-
sic Software Scheduler API for the Basic Software Module and the prototypes for
BswSchedulableEntitys entry point. The definition of the Basic Software Sched-
uler API requires in case of macro implementation that both relevant data structures
and API calls are defined. In case of interfaces implemented as functions, the proto-
types for the Basic Software Scheduler API of the particular Basic Software Module
instance is sufficient. The data structures are dependent from the implementation and
configuration of the Basic Software Scheduler and are not standardized. If data struc-
tures are required these shall be accessible via the Module Interlink Header File as
well.
The RTE generator is required [SWS_Rte_07505] to limit the contents of the Module
Interlink Header file to only that information that is relevant to that instance of a basic
software module. This requirement includes the definition of the API.
[SWS_Rte_07510] d Only Basic Software Scheduler API calls that are valid for the
particular instance of a basic software module shall be defined within the modules
Module Interlink Header File. c(SRS_BSW_00415, SRS_Rte_00017)
Requirement [SWS_Rte_07510] ensures that attempts to invoke invalid API calls will
be rejected as a compile-time error [SRS_Rte_00017].
[SWS_Rte_06534] d The RTE Generator shall wrap each Basic Software Scheduler
API definition of a variant existent API according table 4.28 if the variability shall be
implemented.
   1   #if (<condition> [||<condition>])
   2
   3   <Basic Software Scheduler API Definition>
   4
5 #endif
The provide activating event feature is enabled if the executable entity has at least one
activationReason defined.
[SWS_Rte_08056] d If the provide activating event feature is enabled, the RTE gen-
erator in contract phase shall generate the executable entity signature according to
[SWS_Rte_07282] and [SWS_Rte_08071]. c(SRS_Rte_00238)
[SWS_Rte_08057] d If the provide activating event feature is en-
abled, the RTE generator in contract phase shall generate the type
SchM_ActivatingEvent_<name> (activation vector),                        where <name>
is the symbol describing the executable entitys entry point, to store the activation bits.
Based on the highest value of ExecutableEntityActivationReason.bitPosi-
tion for this executable entity the type shall be either uint8, uint16, or uint32 so
that the highest value of bitPosition fits into the data type. c(SRS_Rte_00238)
Note that it is considered an invalid configuration if ExecutableEntityActiva-
tionReason.bitPosition has a value higher than 31 (see [constr_1226] in soft-
ware component template [2]).
[SWS_Rte_08058] d If the provide activating event feature is enabled, the RTE gen-
erator in contract phase shall generate for each ExecutableEntityActivation-
Reason of one executable entity a definition to provide the specific bit position in the
Rte_ActivatingEvent_<name> data type:
#define SchM_ActivatingEvent_<name>_<activation> xxU
The value of xx is defined by the bitPosition xx = 2 bitPosition. c(SRS_Rte_00238)
For further details see section 4.2.3.3 Provide activating RTE event.
Where
<bsnp> is the BSW Scheduler Name Prefix according [SWS_Rte_07593] and
[SWS_Rte_07594],
<vi> is the vendorId of the BSW module,
<ai> is the vendorApiInfix of the BSW module,
<ki> is the kind infix according table 4.28,
<name> is the short name of the element which is subject to variability in table 4.28
defining the Basic Software Scheduler API name infix.
The sub part in squared brackets [_<vi>_<ai>] is omitted if no vendorApiInfix
is defined for the Basic Software Module. See [SWS_Rte_07528]. c(SRS_Rte_00229,
SRS_BSW_00347)
The specification in [31] specifies a standard API return type Std_ReturnType. The
Std_ReturnType defines the "status" and "error values" returned by API functions.
It is defined as a uint8 type. The value 0 is reserved for No error occurred.
 Symbolic name                        Value    Comments
 [SWS_Rte_07289] d SCHM_E_OK c        0        No error occurred.
 (SRS_BSW_00327)
 [SWS_Rte_07290] d SCHM_E_LIMIT       130      A internal Basic Software Scheduler limit has
 c(SRS_BSW_00327)                              been exceeded. Request could not be handled.
                                               OUT buffers are not modified.
                                               Note: The value has to be identically with
                                               [SWS_Rte_01317]
 [SWS_Rte_07562]                  d   131      An explicit read API call returned no data. (This
 SCHM_E_NO_DATA                   c            is no error.)
 (SRS_BSW_00327)                               Note: The value has to be identically with
                                               [SWS_Rte_01061]
 [SWS_Rte_07563]                  d   132      Transmission acknowledgement received.
 SCHM_E_TRANSMIT_ACK              c            Note: The value has to be identically with
 (SRS_BSW_00327)                               [SWS_Rte_01065]
The underlying type for Std_ReturnType is defined as a uint8 for reasons of com-
patibility. Consequently, #define is used to declare the error values:
   1    typedef uint8 Std_ReturnType; /* defined in Std_Types.h */
   2
   3    #define SCHM_E_OK 0U
[SWS_Rte_07291] d The errors as defined in table 6.1 shall be defined in the RTE
Header File. c(SRS_Rte_00051)
An Std_ReturnType value can be directly compared (for equality) with the above
pre-defined error identifiers.
where the name of the enumeration literal <EnumLiteral> is derived according to the
following rule:
if (attribute symbol of CompuScale is available and not empty) {
    <EnumLiteral> := C identifier specified in symbol attribute of CompuScale
} else {
    if (string specified in the VT element of the CompuConst of the CompuScale
       is a valid C identifier) {
       <EnumLiteral> :=
          string specified in the VT element of the CompuConst of the CompuScale
    } else {
       if (attribute shortLabel of CompuScale is available and not empty) {
          <EnumLiteral> :=
            string specified in shortLabel attribute of CompuScale
       }
    }
}
<prefix> is the optional literalPrefix attribute defined by the Included-
DataTypeSet referring the AutosarDataType using the CompuMethod.
<value> is the value representing the CompuScales point range.
<suffix> shall be "U" for unsigned data types and empty for signed data types. c
(SRS_Rte_00252)
Please note that the prefix can either be defined that the IncludedDataType-
Set with a literalPrefix attribute references the ApplicationDataType or it
references the ImplementationDataType.
[SWS_Rte_03984] implies that the RTE does add prefix to the names of the enumer-
ation constants on explicit demand only. This is necessary in order to handle enu-
meration constants supplied by Basic Software modules which all use their own prefix
convention. Such Enumeration constant names have to be unique in the whole AU-
TOSAR system.
[SWS_Rte_03985] d In the case that the same ImplementationDataType
or ApplicationPrimitiveDataType is referenced via different Included-
DataTypeSets with different literalPrefix attributes, the definition according to
[SWS_Rte_03984] has to be provided once for each different literalPrefix. c
(SRS_Rte_00252)
[SWS_Rte_03986] d If the input of the RTE generator contains a Com-
puMethod with category "TEXTTABLE", "SCALE_LINEAR_AND_TEXTTABLE",
"SCALE_RATIONAL_AND_TEXTTABLE", or BITFIELD_TEXTTABLE that contains a
CompuScale with a point range, and
    neither the attribute symbol of the CompuScale is available and not empty,
    nor the string specified in the VT element of the CompuConst of the CompuScale
     is a valid C identifier,
    nor the attribute shortLabel of CompuScale is available and not empty,
the RTE generator shall reject this input as an invalid configuration. c(SRS_Rte_00018)
[SWS_Rte_03987] d The RTE shall reject configurations where the same Basic Soft-
ware module uses ImplementationDataTypes and ApplicationPrimitive-
DataTypes referencing two or more CompuMethods with category "TEXTTABLE",
"SCALE_LINEAR_AND_TEXTTABLE", "SCALE_RATIONAL_AND_TEXTTABLE", or
BITFIELD_TEXTTABLE that both contain a CompuScale with a different point range
and an identical CompuScale symbolic names as an invalid configuration. The
only exception is that the usage of the ImplementationDataTypes and Applica-
tionPrimitiveDataTypes are defined with non identical <literalPrefix>es. c
(SRS_Rte_00018)
[SWS_Rte_03988] d The RTE generator shall reject configurations violating the [con-
str_1133]. c(SRS_Rte_00018)
This rejects configurations where an ImplementationDataType or
an    ApplicationPrimitiveDataType       references  a   CompuMethod
which is of category "TEXTTABLE",       "SCALE_LINEAR_AND_TEXTTABLE",
"SCALE_RATIONAL_AND_TEXTTABLE", or BITFIELD_TEXTTABLE and has
CompuScales with identical CompuScale symbolic names but different Com-
puScale.lowerLimit or CompuScale.upperLimit.
Note that there might exist additional CompuScales with non-point ranges inside
a CompuMethod of category "TEXTTABLE", "SCALE_LINEAR_AND_TEXTTABLE",
"SCALE_RATIONAL_AND_TEXTTABLE", or BITFIELD_TEXTTABLE , but for those no
enumeration literals are generated by the RTE generator.
The RTE generator does not support the use of C enums for DataPrototypes used
in Basic Software.
[SWS_Rte_03989] d The RTE generator shall reject configurations violating the [con-
str_1244], so where a DataPrototype that is used in an Basic Software module
has set the swDataDefProps.additionalNativeTypeQualifier attribute set to
enum. c(SRS_Rte_00018)
where
<prefix> is the optional literalPrefix attribute defined by the Included-DataTypeSet
referring the AutosarDataType
<DataType> is the short name of the data type.
<invalidValue> is the value defined as invalidValue for the data type.
<suffix> shall be "U" for unsigned data types and empty for signed data types. c()
[SWS_Rte_03994] d The Module Interlink Types Header File shall include the
definitions of all invalidValue constants used by this Basic Software Mod-
ule for each combination of different literalPrefix and ApplicationPrimi-
tiveDataType when the same ImplementationDataType or Application-
PrimitiveDataType is referenced via different IncludedDataTypeSets. c
(SRS_Rte_00252)
where
<BflMaskLabel> is the value of the attribute CompuScale.shortLabel
where
<BitStartPnLabel> is the value of the attribute CompuScale.shortLabel
<BflStartPnNumber> is the number of the first bit in the attribute value CompuS-
cale.mask which is set to 1. Thereby the bit counting starts from 0 (LSB) to n (MSB).
<prefix> is the optional literalPrefix attribute defined by the Included-
DataTypeSet referring the AutosarDataType using the CompuMethod.
<suffix> shall be "U" for unsigned data types and empty for signed data types. c
(SRS_Rte_00252)
[SWS_Rte_03997] d For each unique CompuScale.shortLabel / CompuS-
cale.mask value pair for a CompuScale with a single contiguous bit field which is
located in the compuInternalToPhys container of a CompuMethod referenced by
an ImplementationDataType or ApplicationPrimitiveDataType according
[SWS_Rte_03984] with category BITFIELD_TEXTTABLE the Module Interlink Types
Header File shall contain a definition for the bit field length
   1   #ifndef <prefix><BflLengthLabel>_BflLn
   2   #define <prefix><BflLengthLabel>_BflLn <BflLength><suffix>
   3   #endif /* <prefix><BflLengthLabel>_BflLn */
where
<BflLengthLabel> is the value of the attribute shortLabel.
<BflLength> is the number of contiguous bits set to 1 in the attribute value CompuS-
cale.mask.
<prefix> is the optional literalPrefix attribute defined by the Included-
DataTypeSet referring the AutosarDataType using the CompuMethod.
<suffix> shall be "U" for unsigned data types and empty for signed data types. c
(SRS_Rte_00252)
Please note the example in section F.3.
[SWS_Rte_07415] d The requirements [SWS_Rte_03995], [SWS_Rte_03996], and
[SWS_Rte_03997] are only applied to CompuScales where the attribute shortLabel
is defined. c(SRS_Rte_00252)
6.5.1 SchM_Enter
                 Where here
                 <bsnp> is the BSW Scheduler Name                  Prefix   according
                 [SWS_Rte_07593] and [SWS_Rte_07594],
                 <vi> is the vendorId of the calling BSW module,
                 <ai> vendorApiInfix of the calling BSW module,
                 <me> is the shortName of the BswModuleEntity and
                 <name> is the exclusive area name. The sub part in squared brack-
                 ets [<me>_] is emitted if the attribute BswExclusiveAreaPol-
                 icy.apiPrinciple is set to "perExecutable". The sub part in
                 squared brackets [_<vi>_<ai>] is omitted if no vendorApiInfix
                 is defined for the Basic Software Module. See [SWS_Rte_07528]. c
                 (SRS_Rte_00222, SRS_BSW_00347, SRS_Rte_00046)
Existence:       [SWS_Rte_07251] d A SchM_Enter API shall be created for each
                 ExclusiveArea that is declared in the BswInternalBehav-
                 ior and which has an canEnterExclusiveArea association. c
                 (SRS_Rte_00222, SRS_Rte_00046)
Description:     The SchM_Enter API call is invoked by an AUTOSAR BSW module
                 to define the start of an exclusive area.
Return Value:    None.
Notes:           The Basic Software Scheduler is not required to support nested in-
                 vocations of SchM_Enter for the same exclusive area.
                 [SWS_Rte_07252] d The Basic Software Scheduler shall permit calls
                 to SchM_Enter and SchM_Exit to be nested as long as different
                 exclusive areas are exited in the reverse order they were entered. c
                 (SRS_Rte_00222, SRS_Rte_00046)
6.5.2 SchM_Exit
Where
6.5.3 SchM_Call
              <typeOfReturnValue> <bsnp>[_<vi>_<ai>]_<name>(
                  <data_1>...<data_n>)
              with <typeOfReturnValue> is the returnType of the referenced
              BswModuleEntry. If the returnType of the referenced BswMod-
              uleEntry is of type void or execution is asynchronous, this part
              should be omitted.
              <bsnp> is the BSW Scheduler Name Prefix of the BSW mod-
              ule providing the entry according to [SWS_Rte_07593] and
              [SWS_Rte_07594],
              <vi> is the vendorId of the calling BSW module,
              <ai> is the vendorApiInfix of the calling BSW module,
              <name> is the shortName of the BswModuleClientServerEntry de-
              fined with the role of requiredClientServerEntry.
              The sub part in square brackets [_<vi>_<ai>] is omitted if no
              vendorApiInfix is defined for the Basic Software Module. See
              [SWS_Rte_07528]. c(SRS_Rte_00243)
Existence:    [SWS_Rte_08734] d A synchronous SchM_Call API shall be gen-
              erated if a callPoint association to a BswSynchronousServer-
              CallPoint exists and the BswSynchronousServerCallPoint
              references a BswModuleClientServerEntry as calledEntry
              and this BswModuleClientServerEntry is referenced by the
              BswModuleDescription as a requiredClientServerEntry.
              c(SRS_Rte_00243)
              [SWS_Rte_08735] d An asynchronous SchM_Call API shall
              be generated if a callPoint association to a BswAsyn-
              chronousServerCallPoint      exists  and    the   BswAsyn-
              chronousServerCallPoint      references   a     BswModule-
              ClientServerEntry as calledEntry and this BswModule-
              ClientServerEntry is referenced by the BswModuleDescrip-
              tion as a requiredClientServerEntry. c(SRS_Rte_00243)
              A configuration that includes both synchronous and asynchronous
              Call Points is invalid.
              [SWS_Rte_CONSTR_09079] SchM_Call API may only be used by
              the BswModuleEntity that describe its usage d The SchM_Call
              API may only be used within the BswModuleEntity that refer-
              ences the corresponding BswSynchronousServerCallPoint re-
              spectively BswAsynchronousServerCallPoint using a call-
              Point association. c()
6.5.4 SchM_Result
6.5.5 SchM_Send
6.5.6 SchM_Receive
6.5.7 SchM_Switch
Purpose:        Initiate a mode switch. The SchM_Switch API call is used for send-
                ing of a mode switch notification by a Basic Software Mod-
                ule.
Signature:      [SWS_Rte_07255] d
                Std_ReturnType
                SchM_Switch_<bsnp>[_<vi>_<ai>]_<name>(
                                 IN <mode>)
                Where here
                <bsnp> is the BSW Scheduler Name                  Prefix   according
                [SWS_Rte_07593] and [SWS_Rte_07594],
                <vi> is the vendorId of the calling BSW module,
                <ai> vendorApiInfix of the calling BSW module and
                <name> is the provided (providedModeGroup) ModeDeclara-
                tionGroupPrototype name.
6.5.8 SchM_Mode
There exist two versions of the SchM_Mode APIs. Depending on the attribute en-
hancedModeApi in the basic software module description there shall be provided dif-
ferent versions of this API (see also 6.5.9).
Purpose:        Provides the currently active mode of a (requiredModeGroup or
                providedModeGroup) ModeDeclarationGroupPrototype.
Signature:      [SWS_Rte_07260] d
                <return>
                SchM_Mode_<bsnp>[_<vi>_<ai>]_<name>()
                Where here
                <bsnp> is the BSW Scheduler Name                 Prefix   according
                [SWS_Rte_07593] and [SWS_Rte_07594],
                <vi> is the vendorId of the calling BSW module,
                <ai> vendorApiInfix of the calling BSW module and
                <name> is the (requiredModeGroup or providedModeGroup)
                ModeDeclarationGroupPrototype name.
                The sub part in squared brackets [_<vi>_<ai>] is omitted if no
                vendorApiInfix is defined for the Basic Software Module. See
                [SWS_Rte_07528]. c(SRS_Rte_00213, SRS_BSW_00347)
Existence:      [SWS_Rte_07261] d If a accessedModeGroup association to
                a providedModeGroup or requiredModeGroup ModeDecla-
                rationGroupPrototype exists and if the attribute enhanced-
                ModeApi of the BswModeSenderPolicy resp.        BswModeRe-
                ceiverPolicy is set to false a SchM_Mode API according to
                [SWS_Rte_07260] shall be generated. c(SRS_Rte_00215)
                Note: This ensures the availability of the SchM_Mode API for the
                mode manager and mode user
                [SWS_Rte_CONSTR_09050] SchM_Mode API may only be used
                by BswModuleEntitys that describe its usage d The SchM_Mode
                API may only be used by BswModuleEntitys that contain a cor-
                responding managedModeGroup association or accessedMode-
                Group association c()
Description:    The SchM_Mode API tells the Basic Software Module which mode
                of a required or provided ModeDeclarationGroupPrototype is
                currently active. This is the information that the RTE uses for the
                ModeDisablingDependencys. A new mode will not be indicated
                immediately after the reception of a mode switch notification
                from a mode manager, see section 4.4.4.During mode transitions,
Where here
6.5.10 SchM_SwitchAck
               Where here
               <bsnp> is the BSW Scheduler Name              Prefix   according
               [SWS_Rte_07593] and [SWS_Rte_07594],
6.5.11 SchM_Trigger
                Where here
                <bsnp> is the BSW Scheduler Name                  Prefix   according
                [SWS_Rte_07593] and [SWS_Rte_07594],
                <vi> is the vendorId of the calling BSW module,
                <ai> vendorApiInfix of the calling BSW module and
                <name> is the released (releasedTrigger) Trigger name.
                The sub part in squared brackets [_<vi>_<ai>] is omitted if no
                vendorApiInfix is defined for the Basic Software Module. See
                [SWS_Rte_07528].
6.5.12 SchM_ActMainFunction
Where here
6.5.13 SchM_CData
                Where here
                <bsnp> is the BSW Scheduler Name                  Prefix   according
                [SWS_Rte_07593] and [SWS_Rte_07594],
                <vi> is the vendorId of the calling BSW module,
                <ai> vendorApiInfix of the calling BSW module and
                <name> is the shortName of the ParameterDataPrototype.
                The sub part in squared brackets [_<vi>_<ai>] is omitted if no
                vendorApiInfix is defined for the Basic Software Module. See
                [SWS_Rte_07528]. c(SRS_BSW_00347, SRS_Rte_00155)
Existence:      [SWS_Rte_07094] d An SchM_CData API shall be created for each
                defined ParameterDataPrototype in the role perInstancePa-
                rameter c(SRS_Rte_00155)
Description:    The SchM_CData API provides access to the defined calibration pa-
                rameter within a Basic Software Module. The actual data values for
                a Basic Software Module instance may be set after component com-
                pilation.
Return Value:   The SchM_CData return value provide access to the data value of the
                ParameterDataPrototype in the role perInstanceParameter.
                The return type of SchM_CData is dependent on the Implementa-
                tionDataType of the ParameterDataPrototype and can either
                be a value or a pointer to the location where the value can be ac-
                cessed. Thus the component does not need to use type casting to
                convert access to the ParameterDataPrototype data.
                For details of the <return> value definition see section 5.2.6.6.
                [SWS_Rte_07095] d The return value of the corresponding
                SchM_CData API shall provide access to the calibration parame-
                ter value specific to the instance of the Basic Software Module. c
                (SRS_Rte_00155)
Notes:          None.
6.5.14 SchM_Pim
implement C function interfaces which are directly called by other BSW modules or
interrupts which are called by OS / interrupt controller.
A Basic Software Module Description provides definitions for each BswModuleEn-
tity within the BSW Module. The Basic Software Scheduler triggers the execution of
BswSchedulableEntitys and BswCalledEntitys in response to different Bsw-
Events.
The BswCalledEntitys are triggered by BswOperationInvokedEvents, the
BswSchedulableEntitys by BswScheduleEvents.
For BSW modules implemented using C or C++ the entry point of a BswSchedu-
lableEntity is implemented by a function with global scope defined within a BSW
Modules source code. The following sections consider the function signature and pro-
totype.
6.6.1 Signature
The entry point defined in the Basic Software Modules source must be compatible
with the called function when the BswSchedulableEntity or BswCalledEntity is
triggered by the Basic Software Scheduler and therefore the RTE generator is required
to emit a prototype for the function.
   7   #define <snp>[_<vi>_<ai>]_STOP_SEC_<sadm>
   8   #include "<MemMap_filename.h>"
The RTE Generator shall wrap each BswCalledEntitys Entry Point Prototype in the
Module Interlink Header with the Memory Mapping and Compiler Abstraction macros.
   1   #define <snp>[_<vi>_<ai>]_START_SEC_<sadm>
   2   #include "<MemMap_filename.h>"
   3
   4   FUNC(<returnType>, <memclass>) <bsnp>[_<vi>_<ai>]_<name>(
   5       [IN|IN/OUT|OUT] <parameter_1> ... [IN|IN/OUT|OUT] <parameter_n>);
   6
   7   #define <snp>[_<vi>_<ai>]_STOP_SEC_<sadm>
   8   #include "<MemMap_filename.h>"
<returnType> is the return type defined in the SwServiceArg in the role re-
turnType of the BswModuleEntry which is referenced by the BswModule-
ClientServerEntry in the role encapsulatedEntry. If no type is defined, the
<returnType> is of type void.
<parameter_x> are the arguments defined in the SwServiceArgs in the role
argument of the BswModuleEntry which is referenced by the BswModule-
ClientServerEntry in the role encapsulatedEntry. For each argument the type
has to be give according to [SWS_Rte_08766].
<sadm> is the shortName of the referred swAddrMethod.
<memclass> is the Compiler Abstraction Memory Class                     according
[SWS_Rte_06739] and [SWS_Rte_06740]
<MemMap_filename.h> is the Applicable Memory Mapping Header File Name ac-
cording [SWS_Rte_07830], [SWS_Rte_07831] and [SWS_Rte_07832].
The sub part in square brackets [_<vi>_<ai>] is omitted if no vendorApiInfix is
defined for the Basic Software Module. See [SWS_Rte_07528].
The usage of SchM_ActivatingEvent is optional for BswSchedulableEntity
and defined in [SWS_Rte_08056]. It does currently not exist for BswCalledEntitys.
The Memory Mapping macros could wrap several Entry Point Prototype if these refer-
ring the same swAddrMethod. If the BswSchedulableEntity or the BswCalle-
dEntity does not refer a swAddrMethod the <sadm> is set to CODE.                 c
(SRS_Rte_00148, SRS_Rte_00149, SRS_Rte_00238)
[SWS_Rte_07830] d The RTE Generator shall emit the Applicable Memory Mapping
Header File Name <MemMap_filename.h> as <Msn>[_<vi>_<ai>]_MemMap.h
if the BswImplementation does not contain a DependencyOnArtifact in the
role requiredArtifact where the DependencyOnArtifact.category is set to
MEMMAP. <Msn> is the shortName (case sensitive) of the BswModuleDescription.
c(SRS_Rte_00148)
[SWS_Rte_07831] d The RTE generator shall emit the Applicable Memory Map-
ping Header File Name <MemMap_filename.h> identical to the attribute value
requiredArtifact.artifactDescriptor.shortLabel if the BswImplementa-
tion does contain exactly one DependencyOnArtifact in the role requiredAr-
tifact where the DependencyOnArtifact.category is set to MEMMAP. c
(SRS_Rte_00148)
[SWS_Rte_07832] d The RTE Generator shall emit the Applicable Memory Map-
ping Header File Name <MemMap_filename.h> identical to the attribute value re-
quiredArtifact.artifactDescriptor.shortLabel of the DependencyOnAr-
tifact in the role requiredArtifact where the DependencyOnArtifact.cat-
egory is set to MEMMAP and which is associated with the SectionNamePrefix
implementedIn of the MemorySection associated to the BswModuleEntity. c
(SRS_Rte_00148)
5 #endif
where condition is the Condition Value Macro of the VariationPoint relevant for
the variant existence of the BswSchedulableEntity or BswCalledEntity (see
table 4.30), Entry Point Prototype is the code according an invariant Entry Point
Prototype (see also [SWS_Rte_07282], [SWS_Rte_04542]). c(SRS_Rte_00229)
6.6.3 Reentrancy
[SWS_Rte_08059] d If the provide activating Bsw event feature is enabled, the RTE
shall collect the activating Bsw events, which have the activationReasonRepre-
sentation reference defined, in the context of the OS task the executable entity
is mapped to in an activation vector at the corresponding bit position as defined in
[SWS_Rte_08058]. c(SRS_Rte_00238)
[SWS_Rte_08060] d If the provide activating Bsw event feature is enabled, the RTE
shall provide the collected activating Bsw events (activation vector) to the executable
entity API when the executable entity is "started". The activation vector shall be reset
immediately after it has been provided. c(SRS_Rte_00238)
Provision of the activating Bsw event is curerntly not availbale for BswCalledEntitys.
Since it is possible that there is a time gap between the activation and the execution
(start) of a executable entity the subsequent activations are summed up and provided
with the start of the executable entity.
Activations during the execution of a executable entity are collected for the next start of
that runnable entity.
6.7.1 SchM_Init
SchM_Init is intended to allocate and initialize system resources used by the Basic
Software Scheduler part of the RTE for the core on which it is called.
[SWS_Rte_07270] d
void SchM_Init(const SchM_ConfigType * ConfigPtr)
c(SRS_BSW_00101, SRS_Rte_00116)
[SWS_Rte_07271] d The SchM_Init API is always created. c(SRS_BSW_00101)
[SWS_Rte_07273] d SchM_Init shall return within finite execution time  it must not
enter an infinite loop. c(SRS_BSW_00101)
SchM_Init may be implemented as a function or a macro.
SchM_Init is declared in the lifecycle header file Rte_Main.h.
6.7.2 SchM_Start
c(SRS_BSW_00101)
[SWS_Rte_04547] d The SchM_Start API is always created. c(SRS_BSW_00101)
[SWS_Rte_04548] d SchM_Start shall return within finite execution time  it must not
enter an infinite loop. c(SRS_BSW_00101)
SchM_Start may be implemented as a function or a macro.
SchM_Start is declared in the lifecycle header file Rte_Main.h.
6.7.3 SchM_StartTiming
c(SRS_BSW_00101)
[SWS_Rte_04550] d The SchM_StartTiming API is always created.                                       c
(SRS_BSW_00101)
[SWS_Rte_04551] d SchM_StartTiming shall return within finite execution time  it
must not enter an infinite loop. c(SRS_BSW_00101)
SchM_StartTiming may be implemented as a function or a macro.
SchM_StartTiming is declared in the lifecycle header file Rte_Main.h.
[SWS_Rte_CONSTR_09055] SchM_Init, SchM_Start, SchM_StartTiming shall
be called only once d SchM_Init, SchM_Start, SchM_StartTiming shall be
called only once by the EcuStateManager on each core after the basic software mod-
ules required by the Basic Software Scheduler part of the RTE are initialized. c()
These modules include:
    OS
6.7.4 SchM_Deinit
SchM_Deinit finalizes the Basic Software Scheduler part of the RTE on the core it is
called.
[SWS_Rte_07274] d
void SchM_Deinit(void)
c(SRS_BSW_00336)
[SWS_Rte_07275] d The SchM_Deinit API is always created. c(SRS_BSW_00336)
[SWS_Rte_CONSTR_09057] SchM_Deinit shall be called before shut down of
BSW d SchM_Deinit shall be called by the EcuStateManager before the basic soft-
ware modules required by Basic Software Scheduler part are shut down. c()
These modules include:
    OS
[SWS_Rte_CONSTR_09056] SchM_Deinit API may only be used after the was
RTE finalized d The SchM_Deinit API may only be used after the RTE finalized
(after termination of the Rte_Stop) c()
[SWS_Rte_07277] d SchM_Deinit shall return within finite execution time.                             c
(SRS_BSW_00336)
SchM_Deinit may be implemented as a function or a macro.
SchM_Deinit is declared in the lifecycle header file Rte_Main.h.
6.7.5 SchM_GetVersionInfo
[SWS_Rte_07278] d
void SchM_GetVersionInfo(Std_VersionInfoType * versioninfo)
c(SRS_BSW_00407)
[SWS_Rte_07279] d The SchM_GetVersionInfo API is only created if
RteSchMVersionInfoApi is set to true. c(SRS_BSW_00407)
[SWS_Rte_07280] d SchM_GetVersionInfo shall return the version information of
the RTE module which includes the Basic Software Scheduler. The version information
includes:
    Module Id
    Vendor Id
    Vendor specific version numbers
c(SRS_BSW_00407)
[SWS_Rte_07281] d The parameter versioninfo of the SchM_GetVersionInfo
shall point to the memory location holding the version information of the Basic Software
Scheduler. c(SRS_BSW_00407)
SchM_GetVersionInfo may be implemented as a function or a macro.
SchM_GetVersionInfo is declared in the lifecycle header file Rte_Main.h.
The existence of the API SchM_GetVersionInfo depends on the parameter
RteSchMVersionInfoApi.
Vendor specific version numbers shall represent build version which depends from
the RTE generator version and the input configuration. It is not in the scope if this
specification to standardize the way how the version numbers are created in detail
because these are the vendor specific version numbers.
The overall structure of the RTE configuration parameters is shown in figure 7.2. It has
to be distinguished between the configuration parameters for the RTE generator and
the configuration parameters for the generated RTE itself.
Most of the information needed to generate an RTE is already available in the ECU
Extract of the System Description [8]. From this extract also the links to the AUTOSAR
software-component descriptions and ECU Resource description are available. So
only additional information not covered by the three aforementioned formats needs to
be provided by the ECU Configuration description.
To additionally allow the most flexibility and freedom in the implementations of the RTE,
only configuration parameters which are common to all implementations are standard-
ized in the ECU Configuration Parameter definition. Any additional configuration pa-
rameters which might be needed to configure a full functional RTE have to be specified
using the vendor specific parameter definition mechanism described in the ECU Con-
figuration specification document [5].
destinationType = SW-COMPONENT-TYPE
                                           RteSwComponentInstance :                             RteSoftwareComponentInstanceRef :
                                          EcucParamConfContainerDef                                 EcucForeignReferenceDef
                                                                        +reference
                                            lowerMultiplicity = 0                       destinationType = SW-COMPONENT-PROTOTYPE
                                            upperMultiplicity = *                       upperMultiplicity = 1
                                                                                        lowerMultiplicity = 0
                                                                                               RteEventToTaskMapping :
                                                                       +subContainer          EcucParamConfContainerDef
                                                                                              upperMultiplicity = *
                                                                                              lowerMultiplicity = 0
                             +container                                                  RteExclusiveAreaImplementation :
                                                                       +subContainer       EcucParamConfContainerDef
                                                                                              upperMultiplicity = *
                                                                                              lowerMultiplicity = 0
                                                                                                 RteNvRamAllocation :
                                                                       +subContainer          EcucParamConfContainerDef
                                                                                              upperMultiplicity = *
                                                                                              lowerMultiplicity = 0
                                                                       +subContainer           RteExternalTriggerConfig :
                                                                                              EcucParamConfContainerDef
                                                                                              lowerMultiplicity = 0
                                                                                              upperMultiplicity = *
                                             RteOsInteraction :
                             +container EcucParamConfContainerDef
                                            lowerMultiplicity = 1
                                            upperMultiplicity = *                             RteInitializationRunnableBatch :
                                                                                 +container    EcucParamConfContainerDef
                                                                                                  upperMultiplicity = *
                             +container     RtePostBuildVariantConfiguration :                    lowerMultiplicity = 0
                                               EcucParamConfContainerDef
                                            lowerMultiplicity = 0
                                            upperMultiplicity = 1
In order to identify the RTE Configuration version a dedicated RTE code has been
generated from the RTE Configuration information may contain one or more DOC-
REVISION elements in the ECUC-MODULE-CONFIGURATION-VALUES element of the
RTE Configuration (see example 7.1).
[SWS_Rte_05184] d The REVISION-LABEL shall be parsed according to the rules
defined in the Generic Structure Template [10] for RevisionLabelString allowing
to parse the three version informations for AUTOSAR:
    major version: first part of the REVISION-LABEL
    minor version: second part of the REVISION-LABEL
    patch version: third part of the REVISION-LABEL
    optional fourth part shall be used for documentation purposes in the Basic Soft-
     ware Module Description (see section 3.4.3)
If the parsing fails all three version numbers shall be set to zero. c(SRS_Rte_00233)
[SWS_Rte_05185] d If there are several DOC-REVISION elements in the input ECUC-
MODULE-CONFIGURATION-VALUES the newest according to the DATE shall be taken
into account.
If the search for the newest DOC-REVISION fails three version numbers shall be set to
zero. c(SRS_Rte_00233)
Example 7.1
      <AUTOSAR xmlns="http://autosar.org/4.0.0" xmlns:xsi="http://www.w3.org
         /2001/XMLSchema-instance" xsi:schemaLocation="http://autosar.org
         /4.0.0 AUTOSAR.xsd">
        <AR-PACKAGES>
          <AR-PACKAGE>
            <SHORT-NAME>Rte_Example</SHORT-NAME>
            <ELEMENTS>
              <ECUC-MODULE-CONFIGURATION-VALUES>
                 <SHORT-NAME>Rte_Configuration</SHORT-NAME>
                 <ADMIN-DATA>
                   <DOC-REVISIONS>
                     <DOC-REVISION>
                       <REVISION-LABEL>2.1.34</REVISION-LABEL>
                       <DATE>2009-05-09T00:00:00.0Z</DATE>
                     </DOC-REVISION>
                     <DOC-REVISION>
                       <REVISION-LABEL>2.1.35</REVISION-LABEL>
                       <DATE>2009-06-21T09:30:00.0Z</DATE>
                     </DOC-REVISION>
                   </DOC-REVISIONS>
                 </ADMIN-DATA>
                 <DEFINITION-REF DEST="ECUC-MODULE-DEF">/AUTOSAR/Rte</
                    DEFINITION-REF>
                 <CONTAINERS>
                   <!-- ... -->
                 </CONTAINERS>
              </ECUC-MODULE-CONFIGURATION-VALUES>
            </ELEMENTS>
          </AR-PACKAGE>
        </AR-PACKAGES>
      </AUTOSAR>
                                                                                             +literal           COMPATIBILITY_MODE :
                                                          RteGenerationMode :                                   EcucEnumerationLiteralDef
                                   +parameter
                                                        EcucEnumerationParamDef
                                                                                             +literal
                                                                                                         VENDOR_MODE :EcucEnumerationLiteralDef
                                                   defaultValue = COMPATIBILITY_MODE
                                                                                             +literal
                                                          RteOptimizationMode :
                                   +parameter                                                              RUNTIME :EcucEnumerationLiteralDef
                                                        EcucEnumerationParamDef
                                                                                             +literal
                                                                                                           MEMORY :EcucEnumerationLiteralDef
                                                   defaultValue = RUNTIME
                                                    RteToolChainSignificantCharacters :
                                                          EcucIntegerParamDef
                                   +parameter
                                                   defaultValue = 31
                                                   lowerMultiplicity = 0
                                                   upperMultiplicity = 1
                                                   min = 0
                                                                                                                 RteVfbTraceClientPrefix :
                                                   max = 65535
                                                                                             +parameter            EcucLinkerSymbolDef
                                                   defaultValue = false
                                                                                             +parameter         RteMeasurementSupport :
                                                                                                                 EcucBooleanParamDef
                                                RteVfbTraceFunction :EcucFunctionNameDef
                                   +parameter                                                                   defaultValue = false
                                                   upperMultiplicity = *
                                                   lowerMultiplicity = 0
                                                                                                              RteValueRangeCheckEnabled :
                                                                                             +parameter
                                                                                                                 EcucBooleanParamDef
                                                                                                                defaultValue = false
                                                    RteInExclusiveAreaCheckEnabled :
                                  +parameter
                                                         EcucBooleanParamDef
defaultValue = true
                                                                                           +literal
                                                         RteCalibrationSupport :                               NONE :EcucEnumerationLiteralDef
                                                       EcucEnumerationParamDef             +literal
                                  +parameter                                                            SINGLE_POINTERED :EcucEnumerationLiteralDef
                                                  defaultValue = NONE
                                                                                           +literal
                                                                                                        DOUBLE_POINTERED :EcucEnumerationLiteralDef
                                                                                           +literal
                                                                                                         INITIALIZED_RAM :EcucEnumerationLiteralDef
                                                                                           +literal
                                                     RteIocInteractionReturnValue :                     RTE_IOC :EcucEnumerationLiteralDef
                                  +parameter
                                                      EcucEnumerationParamDef
                                                                                           +literal
                                                                                                        RTE_COM :EcucEnumerationLiteralDef
                                                  defaultValue = RTE_IOC
                                                                                           +literal
                                               RteBypassSupport :EcucEnumerationParamDef                        NONE :EcucEnumerationLiteralDef
                                                                                           +literal
                                                                                                                 EXTENDED_BUFFER_ACCESS :
                                                                                                                   EcucEnumerationLiteralDef
 Description                This container holds the parameters for the configuration of the RTE
                            Generation.
 Configuration Parameters
 Multiplicity          1
 Type                  EcucBooleanParamDef
 Default Value         false
 Post-Build Variant    false
 Value
 Value Configuration   Pre-compile time               X    All Variants
 Class
                       Link time                      
                       Post-build time                
 Scope / Dependency    scope: local
No Included Containers
EcuC :EcucModuleDef
         upperMultiplicity = 1
         lowerMultiplicity = 0
              (from EcuC)
                                                                                                               GenericStructureTemplate
        +container
                                                                                                                        +includedVariant 0..*
                                                                                                                                ARElement
        EcucVariationResolver :                   PredefinedVariantRef :EcucForeignReferenceDef
      EcucParamConfContainerDef   +reference                                                                      VariantHandling::
                                                destinationType = PREDEFINED-VARIANT                              PredefinedVariant
        lowerMultiplicity = 0                   lowerMultiplicity = 1
        upperMultiplicity = 1                   upperMultiplicity = *
+swSystemconstantValueSet 0..*
                                                                                                                                   ARElement
                                                                                                                  VariantHandling::
                                                                                                              SwSystemconstantValueSet
+swSystemconstantValue 0..*
VariantHandling::SwSystemconstValue
                                                                                                          atpVariation
                                                                                                          + value :Numerical
+swSystemconst 1
                                                                                                                         ARElement
                                                                                                                       AtpDefinition
                                                                                                                   SystemConstant::
                                                                                                                    SwSystemconst
No Included Containers
               RtePostBuildVariantConfiguration :
                  EcucParamConfContainerDef
                                                                            GenericStructureTemplate
                lowerMultiplicity = 0
                upperMultiplicity = 1                                                                    +includedVariant
                                                                                           ARElement 0..*
                                                                 VariantHandling::PredefinedVariant
                     +reference
                  RtePostBuildUsedPredefinedVariant :
                      EcucForeignReferenceDef
+postBuildVariantCriterionValue 0..*
                                                                         VariantHandling::
                                                                   PostBuildVariantCriterionValue
                                                                atpVariation
                                                                + value :Integer
+variantCriterion 1
                                                                                           ARElement
                                                                                         AtpDefinition
                                                                         VariantHandling::
                                                                      PostBuildVariantCriterion
No Included Containers
+ecuExtract 1
                                                            ARElement
                                                   AtpStructureElement
                                        System                                                             AtomicSwComponentType
                   atpVariation,atpSplitable
                                                         atpVariation Tags:                                                 ARElement
      +rootSoftwareComposition 0..1                      vh.latestBindingTime =                                              AtpBlueprint
                              AtpPrototype               systemDesignTime                                                AtpBlueprintable
                               Identifiable                                                                                      AtpType
              RootSwCompositionPrototype                                                                      SwComponentType
                                                                                                   +type       1
                    isOfType
                                                                                                               {redefines
                                     1
                                                                                                               atpType}
                                     {redefines
        +softwareComposition         atpType}                                                       isOfType
atpVariation,atpSplitable 0..*
                                                                                                                                               atpVariation Tags:
                                                                                                                                               vh.latestBindingTime =
                                         atpVariation Tags:                                                                +port 0..*        preCompileTime
                                         vh.latestBindingTime =
      atpVariation,atpSplitable                                                                                        AtpBlueprintable
                                         postBuild
                                                                                                                            AtpPrototype
        +connector *                                                                                     PortPrototype
                    AtpStructureElement
                   SwConnector
instanceRef
+provider AbstractProvidedPortPrototype
instanceRef 0..1
 Included Containers
 Container Name             Multiplicity   Scope / Dependency
 RteEventToTaskMapping         0..*        Maps an instance of a RunnableEntity onto one OsTask
                                           based on the activating RTEEvent. In the case of a
                                           RunnableEntity executed via a direct function call this
                                           RteEventToTaskMapping is still specified but no
                                           RteMappedToTask element is included. The
                                           RtePositionInTask parameter is necessary to provide an
                                           ordering of events invoked by the same RTE API.
 RteExclusiveArea               0..*       Specifies the implementation to be used for the data
 Implementation                            consistency of this ExclusiveArea.
 RteExternalTriggerConfig       0..*       Defines the configuration of External Trigger Event
                                           Communication for Software Components
 RteInternalTriggerConfig       0..*       Defines the configuration of Inter Runnable Triggering
                                           for Software Components
 RteNvRamAllocation             0..*       Specifies the relationship between the
                                           AtomicSwComponentTypes NVRAMMapping / NVRAM
                                           needs and the NvM module configuration.
One of the major fragments of the RTE configuration is the mapping of AUTOSAR
Software-Components RunnableEntitys to OS Tasks. The parameters defined to
achieve this are shown in figure 7.7.
                                                RteOsSchedulePoint :                     +literal
                                                                                                            NONE :
                                              EcucEnumerationParamDef                               EcucEnumerationLiteralDef
                               +parameter
                                               lowerMultiplicity = 0                     +literal
                                               upperMultiplicity = 1                                     CONDITIONAL :
                                                                                                    EcucEnumerationLiteralDef
                                                                                         +literal
                                                                                                       UNCONDITIONAL :
                                                                                                    EcucEnumerationLiteralDef                       OsEvent :
                                                  RteUsedOsEventRef :                                                                       EcucParamConfContainerDef
                               +reference          EcucReferenceDef                                                         +destination
                                                                                                                                              upperMultiplicity = *
                                               upperMultiplicity = 1                                                                          lowerMultiplicity = 0
                                               lowerMultiplicity = 0
                                                                                          RteUsedOsAlarmRef :               +destination            OsAlarm :
                                                                       +reference          EcucReferenceDef                                 EcucParamConfContainerDef
                                                                                       upperMultiplicity = 1                                  upperMultiplicity = *
                                          RteUsedOsSchTblExpiryPointRef :              lowerMultiplicity = 0                                  lowerMultiplicity = 0
                               +reference        EcucReferenceDef                                                           +destination
                                                                                                                                           OsScheduleTableExpiryPoint :
                                               upperMultiplicity = 1                                                                       EcucParamConfContainerDef
                                               lowerMultiplicity = 0                     RteImmediateRestart :
                                                                                         EcucBooleanParamDef                                  upperMultiplicity = *
                                                                       +parameter
                                                                                                                                              lowerMultiplicity = 1
                                                                                       defaultValue = false
                                               upperMultiplicity = 1                     +destination
                                               lowerMultiplicity = 0                                            RteSyncPoint :
                                                                                                          EcucParamConfContainerDef
                                                                                         +destination
                                             RteEventSuccessorSyncPointRef :                                 lowerMultiplicity = 0
                               +reference          EcucReferenceDef                                          upperMultiplicity = *
                                               upperMultiplicity = 1
                                               lowerMultiplicity = 0
The mapping is based on the RTEEvent because it is the source of the activation.
For each RunnableEntity which belongs to an AUTOSAR Software-Component in-
stance mapped on the ECU there needs to be a mapping container specifying how this
RunnableEntity activation shall be handled.
[SWS_Rte_07843] d The RTE Generator shall reject configurations where the same
RTEEvent instance which can start a RunnableEntity is referenced by multiple task
mappings. c()
One major constraint is posed by the canBeInvokedConcurrently attribute of each
RunnableEntity because data consistency issues have to be considered.
Example 7.2
code the call to the Os API Schedule shall always be performed, even when the
RunnableEntity itself has not been executed (called). c()
Since the execution of a RunnableEntity may be performed (e.g. due to mode de-
pendent scheduling) the call of the Os API Schedule without any RunnableEntity
execution in between might occur. in order to prohibit such a call chain the CONDI-
TIONAL schedule point is available.
[SWS_Rte_05114] d The RTE Generator shall create a conditional call to the Os API
Schedule after the execution call of the RunnableEntity if the RteOsSchedule-
Point configuration parameter is set to CONDITIONAL. In the generated code the call
to the Os API Schedule shall be omitted when there was already a call to the Os API
Schedule before without any RunnableEntity execution in between. c()
[SWS_Rte_07042] d The Os API Schedule according [SWS_Rte_05113] and
[SWS_Rte_05114] shall be called after the data written with implicit write access by
the RunnableEntity are propagated to other RunnableEntitys as specified in
[SWS_Rte_07021], [SWS_Rte_03957], [SWS_Rte_07041] and [SWS_Rte_03584] c()
[SWS_Rte_07043] d The Os API Schedule according [SWS_Rte_05113] and
[SWS_Rte_05114] shall be called before the preemption area specific buffer used
for a implicit read access of the successor RunnableEntity are filled with actual data
by a copy action according [SWS_Rte_07020]. c()
[SWS_Rte_05115] d The RTE Generator shall create no call to the Os API Schedule
after the execution of the RunnableEntity if the RteOsSchedulePoint configura-
tion parameter is not present or is set to NONE. c()
[SWS_Rte_01373] d The RTE Generator shall support the independent setting
of RteOsSchedulePoint for RteEventToTaskMappings that map the same
RunnableEntity. c(SRS_Rte_00018)
7.5.1.5 Os Interaction
7.5.1.7 Constraints
There are some constraints which do apply when actually mapping the RunnableEn-
tity to an OsTask:
[SWS_Rte_05082] d The following restrictions apply to RTEEvents which are used
to activate RunnableEntity. OsEvents that are used to wakeUpFromWaitPoint
shall not be included in the mapping. c()
When a wakeUpFromWaitPoint is occurring the RunnableEntity resumes its ex-
ecution in the context of the originally activated OsTask.
[SWS_Rte_05083] d The RTE Generator shall reject configurations where a
RunnableEntity has its canBeInvokedConcurrently attribute set to false, and
this RunnableEntity is mapped to different tasks which can preempt each other. c()
[SWS_Rte_07229] d To evaluate [SWS_Rte_05083] in case of triggered
runnables which are activated by a direct function call ([SWS_Rte_07214],
[SWS_Rte_07224] and [SWS_Rte_07554]) the OsTask (context of the caller) is
defined by the RunnableEntitys containing the activating InternalTrigger-
ingPoint or ExternalTriggeringPoint. c(SRS_Rte_00162, SRS_Rte_00163,
SRS_Rte_00230)
[SWS_Rte_07155] d To evaluate [SWS_Rte_05083] in case of on-entry
ExecutableEntitys, on-transition ExecutableEntitys, on-exit Exe-
cutableEntitys, and ModeSwitchAck ExecutableEntitys which are acti-
vated by a direct function call the OsTask (context of the caller) is defined
                            This parameter shall not be set to true when the mapped RTEEvent
                            refers to a RunnableEntity which minimumStartInterval attribute is > 0.
 Multiplicity               1
 Type                       EcucBooleanParamDef
 Default Value              false
 Post-Build Variant         false
 Value
 Value Configuration        Pre-compile time               X   All Variants
 Class
                            Link time                      
                            Post-build time                
 Scope / Dependency         scope: local
No Included Containers
This section contains configuration items which are closely related to the interaction of
the Rte with the Os.
                                      RteOsInteraction :                                     RteUsedOsActivation :
                                 EcucParamConfContainerDef         +subContainer          EcucParamConfContainerDef
                                     lowerMultiplicity = 1                             upperMultiplicity = *
                                     upperMultiplicity = *                             lowerMultiplicity = 0
                                                                                     RteModeToScheduleTableMapping :
                                                                   +subContainer        EcucParamConfContainerDef
                                                                                       lowerMultiplicity = 0
                                                                                       upperMultiplicity = *
                                                                                                RteSyncPoint :
                                                                   +subContainer          EcucParamConfContainerDef
                                                                                       lowerMultiplicity = 0
                                                                                       upperMultiplicity = *
This is a collection of possible ways how the Rte might utilize Os to achieve various ac-
tivation scenarios. The used Os objects are referenced in these configuration entities.
                   RteOsInteraction :
              EcucParamConfContainerDef
                  lowerMultiplicity = 1
                  upperMultiplicity = *
+subContainer
(from OS)
                                                              RteActivationOsSchTblRef :                          OsScheduleTable :
                                                +reference        EcucReferenceDef               +destination EcucParamConfContainerDef
                                                             upperMultiplicity = 1                              upperMultiplicity = *
                                                             lowerMultiplicity = 0                              lowerMultiplicity = 0
(from OS)
                                                              RteActivationOsAlarmRef :                               OsAlarm :
                                                +reference       EcucReferenceDef                +destination EcucParamConfContainerDef
                                                             upperMultiplicity = 1                              upperMultiplicity = *
                                                             lowerMultiplicity = 0                              lowerMultiplicity = 0
(from OS)
                                                              RteExpectedTickDuration :
                                                                 EcucFloatParamDef
                                               +parameter
                                                             min = 0
                                                             max = INF
                                                             lowerMultiplicity = 1
                                                             upperMultiplicity = 1
                                                             RteExpectedActivationOffset :
                                                                 EcucFloatParamDef
                                              +parameter
                                                             min = 0
                                                             max = INF
                                                             lowerMultiplicity = 1
                                                             upperMultiplicity = 1
No Included Containers
Optional configuration of the Rte to support the mapping of modes and Os schedule
tables.
[SWS_Rte_05146] d The referenced schedule table of RteModeScheduleTableRef
shall be activated if one of the modes referenced in RteModeSchtblMapModeDec-
larationRef is active in the mode machine instances from the references of
       RteModeSchtblMapSwc or
       RteModeSchtblMapBsw.
c()
            RteOsInteraction :
       EcucParamConfContainerDef
         lowerMultiplicity = 1
         upperMultiplicity = *                      RteModeScheduleTableRef :                               OsScheduleTable :
                                                        EcucReferenceDef               +destination     EcucParamConfContainerDef
      +subContainer
                                      +reference       upperMultiplicity = 1                               upperMultiplicity = *
    RteModeToScheduleTableMapping                      lowerMultiplicity = 1                               lowerMultiplicity = 0
       :EcucParamConfContainerDef
                                                                                                                  (from OS)
                                                       lowerMultiplicity = 0
                                                       upperMultiplicity = 1                             +destination
                                                                                                          RteBswModuleInstance :
                                    +subContainer                                                       EcucParamConfContainerDef
                                                                                                         lowerMultiplicity = 0
                                                                                                         upperMultiplicity = *
(from RTE)
                                                                                     +reference             RteModeSchtblMapBswProvidedModeGroupRef :
                                                                                                                     EcucForeignReferenceDef
                                                                                                       lowerMultiplicity = 1
                                                                                                       upperMultiplicity = 1
                                                                                                       destinationType = MODE-DECLARATION-GROUP-PROTOTYPE
                                                       lowerMultiplicity = 0
                                                       upperMultiplicity = 1                             +destination
                                                                                                         RteSwComponentInstance :
                                    +subContainer                                                       EcucParamConfContainerDef
                                                                                                          lowerMultiplicity = 0
                                                                                                          upperMultiplicity = *
(from RTE)
destinationType = ABSTRACT-PROVIDED-PORT-PROTOTYPE
                                                     RteModeSchtblMapModeDeclarationRef :
                                                           EcucForeignReferenceDef
                                      +reference
                                                       lowerMultiplicity = 1
                                                       upperMultiplicity = *
                                                       destinationType = MODE-DECLARATION
                                                                                                                                         isOfType      1
                                                                                                                                                         {redefines
                                                                                                                                              +type      atpType}
                                                            AtpStructureElement                                                                            ARElement
                                                                     Identifiable +modeDeclaration                                                        AtpBlueprint
                                                        ModeDeclaration::         1..*    atpVariation                                              AtpBlueprintable
                                                         ModeDeclaration                                                                                      AtpType
                                                                                          +initialMode                                     ModeDeclaration::
                                               +     value :PositiveInteger [0..1]    1                                                   ModeDeclarationGroup
Figure 7.10: Configuration how modes are interacting with schedule tables
 Included Containers
 Container Name             Multiplicity   Scope / Dependency
 RteModeSchtblMapBsw           0..1        Specifies an instance of a
                                           ModeDeclarationGroupPrototype of a Bsw-Module.
 RteModeSchtblMapSwc            0..1       Specifies an instance of a
                                           ModeDeclarationGroupPrototype of a
                                           SwComponentPrototype.
No Included Containers
No Included Containers
The RTE Generator can be configured to implement a different data consistency mech-
anism for each ExclusiveArea defined for an AUTOSAR software-component.
In figure 7.11 the configuration of the actually selected data consistency mechanism is
shown.
[SWS_Rte_CONSTR_03510] Exclude usage of OS_SPINLOCK in RteExclu-
siveAreaImplementation d The usage of the enumeration literal OS_SPINLOCK
for the parameter RteExclusiveAreaImplMechanism shall be excluded if the pa-
rameter RteExclusiveAreaImplMechanism is used in the context of the container
RteExclusiveAreaImplementation. c()
    RteSwComponentInstance :                           RteSoftwareComponentInstanceRef :
   EcucParamConfContainerDef     +reference                EcucForeignReferenceDef
                                                       AtpPrototype                                                               ARElement
                                                                                                +type                            AtpBlueprint
                                            Composition::
                                                                                                                             AtpBlueprintable
                                        SwComponentPrototype
                                                                       *      1 isOfType                                           AtpType
                                                                              {redefines atpType}           Components::SwComponentType
                                                                                                          Components::
                                                                                                    AtomicSwComponentType
                                                                                                                          AtpStructureElement
                                                     Identifiable +exclusiveArea                                                                    atpVariation,atpSplitable
                                                                                                                      InternalBehavior::
                                          InternalBehavior::                                                           InternalBehavior
                                                                  0..*   atpVariation,atpSplitable
                                            ExclusiveArea
+internalBehavior 0..1
SwcInternalBehavior::SwcInternalBehavior
                                                                                            +   handleTerminationAndRestart :HandleTerminationAndRestartEnum
                                                                                            +   supportsMultipleInstantiation :Boolean
+subContainer
   RteExclusiveAreaImplementation :                         RteExclusiveAreaRef :
                                      +reference
     EcucParamConfContainerDef                            EcucForeignReferenceDef
                                                                                                +literal          ALL_INTERRUPT_BLOCKING :
                                                                                                                   EcucEnumerationLiteralDef
Os
                                                    RteExclusiveAreaOsResourceRef :                                              OsResource :
                                      +reference           EcucReferenceDef                                +destination   EcucParamConfContainerDef
                                                      lowerMultiplicity = 0                                                 upperMultiplicity = *
                                                      upperMultiplicity = 1                                                 lowerMultiplicity = 0
(from OS)
No Included Containers
The configuration of the NVRam access does involve several templates, because it
closes the gap between the AUTOSAR software-components, the NVRAM Manager
Services and the BSW Modules.
In figure 7.12 the related information from the AUTOSAR Software Component Tem-
plate is shown.
                                                                         Software Component template
                                                    atpVariation                                   atpVariation,atpSplitable
                                            +assignedData    0..*                            +perInstanceMemory *
                                                                                                             AtpStructureElement
      ServiceNeeds::NvBlockNeeds            ServiceNeeds::RoleBasedDataAssignment
                                                                                                                      Identifiable
                                            +    role :Identifier                                          PerInstanceMemory::
                                                                                          +usedPim
                                                                                                           PerInstanceMemory
                                                                                                0..1
                                                                                                       +    initValue :String [0..1]
                                                                                                       +    type :CIdentifier
                                                                                                                               atpVariation,atpSplitable
                                                                                                       +    typeDefinition :String
atpVariation,atpSplitab
                                                                                         {XOR
                                                                                         role of owning
                                                                                         RoleBasedDataAssignement shall be
                                                                                         ramBlock}
                 {role of owning
                 RoleBasedDataAssignement               +usedDataElement      0..1                            +arTypedPerInstanceMemory *
                 shall be defaultValue}
                                                                                                                             AutosarDataPrototype
                                                                     DataElements::             +localVariable
                                                                    AutosarVariableRef                                    DataPrototypes::
                                                                                                             0..1      VariableDataPrototype
In figure 7.13 the ECU Configuration part of the NVRam allocation is shown. It re-
lates the software-components SwcServiceDependency and NvBlockNeeds infor-
mation with the NVRam Managers NvMBlockDescriptor and the linker symbols of
the RAM and ROM sections to be used.
      upperMultiplicity = *                                                                                                                        upperMultiplicity = 1
                                                                              NvMRomBlockDataAddress :
      lowerMultiplicity = 0                                                                                                                        lowerMultiplicity = 0
                                                                                 EcucStringParamDef
                                                                               lowerMultiplicity = 0
                                                                               upperMultiplicity = 1
+parameter 0..1
                                                                                                                upperMultiplicity = 65536
                                                                                                                lowerMultiplicity = 1
                                                                                                                                      +parameter
                                                                                                     +parameter 0..1
                                                  RteNvmRamBlockLocationSymbol :                                                              NvMNvramBlockIdentifier :
                                                                                                         NvMRamBlockDataAddress :               EcucIntegerParamDef
                                    +parameter         EcucLinkerSymbolDef
                                                                                                            EcucStringParamDef
+reference +reference
XOR
                                                                                                                                                         AtpStructureElement
                                                                                                                                                                  Identifiable
                                                                               NvBlockDescriptor
               Identifiable                        AtpStructureElement
                              +serviceNeeds                                                               AtpStructureElement
          ServiceNeeds                                      Identifiable                                           Identifiable
                              1                    ServiceDependency                              PerInstanceMemory
                                              SwcServiceDependency
                                                                                       +   initValue :String [0..1]
                                                                                       +   type :CIdentifier
               +nvBlockNeeds 1                                                         +   typeDefinition :String
                                                atpVariation
              NvBlockNeeds              +assignedData    0..*                   +usedPim          0..1
                                                                                                           {XOR
                                                                                                           role of owning
                                          RoleBasedDataAssignment                                          RoleBasedDataAssignement
                                          +    role :Identifier                                            shall be ramBlock}
                                                                                                                                                        +ramBlock 1
                                                                           +usedDataElement                                                         AutosarDataPrototype
                                                                                                                          +localVariable
                                                                                                    AutosarVariableRef                        VariableDataPrototype
                                                                                           0..1                                        0..1
                                                                                                                                                                  +romBlock 0..1
                                                                           +usedParameterElement
                                                                                                         AutosarParameterRef                                AutosarDataPrototype
                                                                                                  0..1
                                                                                                                                                       ParameterDataPrototype
                                                                                 {role of owning
                                                                                 RoleBasedDataAssignement shall be
                                                                                 defaultValue}
                          XOR
 Multiplicity             0..1
 Type                     Foreign reference to SWC-SERVICE-DEPENDENCY
 Post-Build Variant       false
 Multiplicity
 Post-Build Variant       false
 Value
 Multiplicity             Pre-compile time            X   All Variants
 Configuration Class
                          Link time                   
                          Post-build time             
 Value Configuration      Pre-compile time            X   All Variants
 Class
                          Link time                   
                          Post-build time             
 Scope / Dependency       scope: local
No Included Containers
This configuration determine the size of the queue queuing the issued triggers.
The RteExternalTriggerConfig container and RteInternalTriggerConfig
container is defined in the context of the RteSwComponentInstance which already
predefines the context of the Trigger / InternalTriggeringPoint.
[SWS_Rte_CONSTR_09005] The references RteSwcTriggerSourceRef has to
be consistent with the RteSoftwareComponentInstanceRef d The references
RteSwcTriggerSourceRef has to be consistent with the RteSoftwareCompo-
nentInstanceRef. This means the referenced Trigger / InternalTrigger-
ingPoint has to belong to the AtomicSwComponentType which is referenced by
the related SwComponentPrototype. c()
From SWC-T
                                                                       AtpBlueprintable                                                                ARElement
                                                                          AtpPrototype +port                      +component                          AtpBlueprint
                                                        Components::PortPrototype                                                                 AtpBlueprintable
                                                                                          0..* atpVariation,atpSplitable                                AtpType
                                                                                                                                Components::SwComponentType
                                                              Components::
                                                      AbstractProvidedPortPrototype                                                       Components::
                                                                                                                                    AtomicSwComponentType
Components::PPortPrototype
                                                                                                                                   atpVariation,atpSplitable
                                                              +pPort     *
                                                                                                                              +internalBehavior     0..1
                                                                isOfType
                                                                       1                                                                          InternalBehavior
                                                  +providedInterface   {redefines atpType}
                                                                                                                                        SwcInternalBehavior::
                                                                            ARElement                                                   SwcInternalBehavior
                                                                           AtpBlueprint
                                                                       AtpBlueprintable
                                                                               AtpType
                                                         PortInterface::PortInterface
                                                                                                                                   atpVariation,atpSplitable
                                                                                                                                      +runnable 0..*
                                                                                                                                              AtpStructureElement
                                                                                                                                                 ExecutableEntity
                                                                                                                                        SwcInternalBehavior::
                                                       PortInterface::TriggerInterface                                                    RunnableEntity
                              +subContainer
                                                                                                                RteTriggerSourceQueueLength :
                                                                                                                     EcucIntegerParamDef
                                                                                              +parameter
                                                                                                                defaultValue = 0
                                                                                                                lowerMultiplicity = 1
                                                                                                                upperMultiplicity = 1
                                                                                                                min = 0
                                                                                                                max = 4294967295
+subContainer
                                                                                                                RteTriggerSourceQueueLength :
                                                                                                                     EcucIntegerParamDef
                                                                                              +parameter
                                                                                                                defaultValue = 0
                                                                                                                lowerMultiplicity = 1
                                                                                                                upperMultiplicity = 1
                                                                                                                min = 0
                                                                                                                max = 4294967295
          (from RTE)
No Included Containers
No Included Containers
During the system development there is no need to select the actual implementation
which will be later integrated on one ECU. Therefore the ECU Extract of System De-
scription may not specify the SwcImplementation information yet.
For RTE Generation the information about the to be used SwcImplementation
for each SwComponentType needs be provided to the RTE Generator (regardless
whether the information is from the Ecu Extract or the Ecu Configuration.
The mapping of SwcImplementation to SwComponentType is done in the Ecu Con-
figuration of the Rte using the two references RteComponentTypeRef and RteIm-
plementationRef (see figure 7.15). For the mapping in the Ecu Extract please refer
to the Specification of the System Template [8].
              RteComponentTypeRef :                           RteSwComponentType :                                     RteImplementationRef :
              EcucForeignReferenceDef          +reference   EcucParamConfContainerDef                                 EcucForeignReferenceDef
                                                                                                +reference
SWComponentTemplate
                                                                                                                                   Implementation
                     ARElement                                                                                       SwcImplementation
                    AtpBlueprint
                                                                                                             +   requiredRTEVendor :String [0..1]
                AtpBlueprintable
                        AtpType
              SwComponentType                                                                                                     *
+behavior 1
                                                                                                                                      InternalBehavior
           AtomicSwComponentType                            +internalBehavior                           SwcInternalBehavior
 Included Containers
 Container Name                                Multiplicity              Scope / Dependency
 RteComponentType                                 0..1                   Specifies for each ParameterSwComponentType or
 Calibration                                                             AtomicSwComponentType whether calibration is
                                                                         enabled. If references to SwAddrMethod are provided in
                                                                         RteCalibrationSwAddrMethodRef only
                                                                         ParameterDataPrototypes with the referenced
                                                                         SwAddrMethod shall have software calibration support
                                                                         enabled.
In the AUTOSAR Software Component Template two places may provide calibration
data: the ParameterSwComponentType and the AtomicSwComponentType (or
more precisely the subclasses of AtomicSwComponentType). Whether the calibra-
tion is enabled for a specific SwComponentType can be configured as shown in fig-
ure 7.16.
     RteSwComponentType :                              RteComponentTypeRef :                                  Software Component template
                                  +reference           EcucForeignReferenceDef
   EcucParamConfContainerDef
                                                                                                                           ARElement
     lowerMultiplicity = 0                       destinationType = SW-COMPONENT-TYPE                                      AtpBlueprint
     upperMultiplicity = *                                                                                            AtpBlueprintable
                                                                                                                              AtpType
                                                                                                                    SwComponentType
AtomicSwComponentType ParameterSwComponentType
                                                                                                                       atpVariation
                                                                                                                      SwDataDefProps
+swAddrMethod 0..1
                                                                                                                                ARElement
                                                                                                                               AtpBlueprint
                                                                                                                           AtpBlueprintable
                                                                                                                       SwAddrMethod
                                               RteComponentTypeCalibration :
                                                EcucParamConfContainerDef
                                                                               +parameter RteCalibrationSupportEnabled :
                                                 upperMultiplicity = 1                        EcucBooleanParamDef
                               +subContainer     lowerMultiplicity = 0
                                                                                             RteCalibrationSwAddrMethodRef :
                                                                               +reference
                                                                                                 EcucForeignReferenceDef
                                                                                             lowerMultiplicity = 0
                                                                                             upperMultiplicity = *
                                                                                             destinationType = SW-ADDR-METHOD
No Included Containers
                                                                                           *
                                                                                    isOfType
                                                                                Components::
                                                                          AtomicSwComponentType
                                                              atpVariation,atpSplitable
                                                                       +internalBehavior      0..1
                                                                                                            InternalBehavior
                                                                   SwcInternalBehavior::SwcInternalBehavior
                                                    +    handleTerminationAndRestart :HandleTerminationAndRestartEnum
                                                    +    supportsMultipleInstantiation :Boolean
                                                          atpVariation,atpSplitable
                                                                            +runnable 0..*
                                                                                                     AtpStructureElement
                                                                                                        ExecutableEntity
                                                                    SwcInternalBehavior::RunnableEntity
                                                    + canBeInvokedConcurrently :Boolean
                                                    + symbol :CIdentifier
                 Rte :EcucModuleDef               atpVariation,atpSplitable atpVariation,atpSplitable
                                                         +dataReadAccess 0..*           +dataWriteAccess 0..*
                upperMultiplicity = 1
                lowerMultiplicity = 0                                                                  AbstractAccessPoint
                                                                                                       AtpStructureElement
                       (from RTE)                                                                               Identifiable
                                                                         DataElements::VariableAccess
              RteImplicitCommunication :                         RteVariableReadAccessRef :
              EcucParamConfContainerDef                           EcucForeignReferenceDef
                                            +reference
                upperMultiplicity = *                      destinationType = VARIABLE-ACCESS
                lowerMultiplicity = 0                      lowerMultiplicity = 0
                                                           upperMultiplicity = *
                                                                         RteVariableWriteAccessRef :
                                                                          EcucForeignReferenceDef
                                                    +reference
                                                                     destinationType = VARIABLE-ACCESS
                                                                     lowerMultiplicity = 0
                                                                     upperMultiplicity = *
                                                                 RteImmediateBufferUpdate :
                                            +parameter
                                                                   EcucBooleanParamDef
defaultValue = false
defaultValue = false
RteSoftwareComponentInstanceRef :EcucInstanceReferenceDef
                            Data values for Coherent Implicit Read Accesses are read before the
                            first reading RunnbaleEntity starts and are stable during the execution
                            of all the reading RunnableEntitys; except Coherent Implicit Write
                            Accesses belongs to the same Coherency Group. Data values written
                            by Coherent Implicit Write Accesses are available for readers not
                            belonging to the Coherency Group after the last writing RunnableEntity
                            has terminated.
                            Please note that a Coherent Implicit Data Access can be defined for
                            VariableAccesses to same and different data element. Nevertheless
                            all Coherent Implicit Data Accesses of one Coherency Group have to
                            be executed in the same task.
 Multiplicity               1
 Type                       EcucBooleanParamDef
 Default Value              false
 Post-Build Variant         false
 Value
 Value Configuration        Pre-compile time               X   All Variants
 Class
                            Link time                      
                            Post-build time                
 Scope / Dependency         scope: local
No Included Containers
                                                 RteOsInteraction :
                                            EcucParamConfContainerDef
                               +container      lowerMultiplicity = 1
                                               upperMultiplicity = *
                                                                                          RteBswModuleConfigurationRef :EcucForeignReferenceDef
                                                                           +reference
                                                                                           lowerMultiplicity = 0
                                                                                           upperMultiplicity = 1
                                                                                           destinationType = ECUC-MODULE-CONFIGURATION-VALUES
                                                                                            RteBswEventToTaskMapping :
                                                                        +subContainer       EcucParamConfContainerDef
                                                                                           lowerMultiplicity = 0
                               +container                                                  upperMultiplicity = *
                                                                                              RteBswExclusiveAreaImpl :
                                                                        +subContainer        EcucParamConfContainerDef
                                                                                           lowerMultiplicity = 0
                                                                                           upperMultiplicity = *
                                                                                          RteBswRequiredTriggerConnection :
                                                                        +subContainer        EcucParamConfContainerDef
                                                                                           lowerMultiplicity = 0
                                                                                           upperMultiplicity = *
                                                                                        RteBswRequiredModeGroupConnection :
                                                                        +subContainer        EcucParamConfContainerDef
                                                                                           lowerMultiplicity = 0
                                                                                           upperMultiplicity = *
Rte :EcucModuleDef
                            upperMultiplicity = 1
                            lowerMultiplicity = 0
(from RTE)
+container
                              RteBswGeneral :                      RteSchMVersionInfoApi :
                         EcucParamConfContainerDef                  EcucBooleanParamDef
                                                     +parameter
                           lowerMultiplicity = 1                     lowerMultiplicity = 1
                           upperMultiplicity = 1                     upperMultiplicity = 1
                                                                     defaultValue = false
                                                                  RteUseComShadowSignalApi :
                                                                     EcucBooleanParamDef
                                                     +parameter
                                                                     lowerMultiplicity = 1
                                                                     upperMultiplicity = 1
                                                                     defaultValue = false
                            If this parameter is set to true the ShadowSignal APIs and Signal APIs
                            (Com_SendSignal, Com_InvalidateSignal, Com_ReceiveSignal) are
                            used. If this parameter is set to false only the Signal APIs
                            (Com_SendSignal, Com_InvalidateSignal, Com_ReceiveSignal) are
                            used.
 Multiplicity               1
 Type                       EcucBooleanParamDef
 Default Value              false
No Included Containers
 Included Containers
 Container Name          Multiplicity   Scope / Dependency
 RteBswEventToTask          0..*        Maps a BswModuleEntity onto an OsTask based on the
 Mapping                                activating BswEvent. A BswModuleEntity can be
                                        activated by more than one BswEvent and thus be
                                        mapped to more than one OsTask. In the case of a
                                        BswSchedulableEntity executed via a direct function call
                                        this RteBswEventToTaskMapping is still specified but no
                                        RteBswMappedToTaskRef element is included. The
                                        RteBswPositionInTask parameter is necessary to
                                        provide an ordering of events invoked by the same RTE
                                        API.
 RteBswExclusiveArea         0..*       Represents one ExclusiveArea of one
 Impl                                   BswImplementation. Used to specify the implementation
                                        means of this ExclusiveArea.
 RteBswExternalTrigger       0..*       Defines the configuration of Inter Basic Software Module
 Config                                 Entity Triggering
 RteBswInternalTrigger       0..*       Defines the configuration of internal Basic Software
 Config                                 Module Entity Triggering
 RteBswRequiredClient        0..*       Defines the connection between one
 ServerConnection                       requiredClientServerEntry and one
                                        providedClientServerEntry of a BswModuleDescription.
                                        This container shall be provided on the client side of the
                                        connection.
 RteBswRequiredMode          0..*       Defines the connection between one
 GroupConnection                        requiredModeGroup of this BSW Module instance and
                                        one providedModeGroup instance.
 RteBswRequiredSender        0..*       Defines the connection between one requiredData and
 ReceiverConnection                     one providedData of a BswModuleDescription. This
                                        container shall be provided on the receiver side of the
                                        connection.
 RteBswRequiredTrigger       0..*       Defines the connection between one requiredTrigger of
 Connection                             this BSW Module instance and one releasedTrigger
                                        instance.
            lowerMultiplicity = 0
            upperMultiplicity = *                                                           +literal          ALL_INTERRUPT_BLOCKING :
                                                                                                               EcucEnumerationLiteralDef
          +subContainer
                                                                                            +literal
                                                                                                               OS_INTERRUPT_BLOCKING :
           RteBswExclusiveAreaImpl :                                                                            EcucEnumerationLiteralDef
          EcucParamConfContainerDef
                                                                                                                                  Os
                                                      RteBswExclusiveAreaOsResourceRef :
                                        +reference            EcucReferenceDef                                                   OsResource :
                                                                                                           +destination
                                                                                                                          EcucParamConfContainerDef
                                                        lowerMultiplicity = 0
                                                        upperMultiplicity = 1                                               upperMultiplicity = *
                                                                                                                            lowerMultiplicity = 0
                                                      RteBswExclusiveAreaOsSpinlockRef :                                         OsSpinlock :
                                        +reference            EcucReferenceDef                             +destination   EcucParamConfContainerDef
                                                        lowerMultiplicity = 0                                               lowerMultiplicity = 0
                                                        upperMultiplicity = 1                                               upperMultiplicity = *
                                                            RteBswExclusiveAreaRef :
                                        +reference          EcucForeignReferenceDef
                                                        lowerMultiplicity = 1
                                                        upperMultiplicity = 1
                                                        destinationType = EXCLUSIVE-AREA
BswModuleTemplate
                                                                                                                           Identifiable
                                                                                                        ExclusiveArea
                                                                                                                           Identifiable
                                                                                                     ExecutableEntity
                                                                                   +   minimumStartInterval :TimeValue
                                                                                   +   reentrancyLevel :ReentrancyLevelEnum [0..1]
BswModuleEntity
BswSchedulableEntity
No Included Containers
BswModuleTemplate
                                                           RteBswImplementationRef :                                                           Implementation
       RteBswModuleInstance :
                                                            EcucForeignReferenceDef                                         BswImplementation
     EcucParamConfContainerDef      +reference
                                                                                                              +   arReleaseVersion :RevisionLabelString
                                                     lowerMultiplicity = 1
       lowerMultiplicity = 0                                                                                  +   vendorApiInfix :Identifier [0..1]
                                                     upperMultiplicity = 1
       upperMultiplicity = *
                                                     destinationType = BSW-IMPLEMENTATION                                  +behavior       1
                                                                                                                                  InternalBehavior
                                                                                                                            BswInternalBehavior
                                                                                                                       atpVariation,atpSplitable
     +subContainer
                                                                                                                            +event 0..*
     RteBswEventToTaskMapping :                        RteBswEventRef :                                                                   AbstractEvent
     EcucParamConfContainerDef                      EcucForeignReferenceDef                                                      BswEvent
                                  +reference
       lowerMultiplicity = 0                       lowerMultiplicity = 1
       upperMultiplicity = *                       upperMultiplicity = 1
                                                   destinationType = BSW-EVENT
                                                                                                                                     Os
                                                     RteBswMappedToTaskRef :                                +destination
                                  +reference             EcucReferenceDef                                                            OsTask :
                                                                                                                             EcucParamConfContainerDef
                                                   lowerMultiplicity = 0
                                                   upperMultiplicity = 1                                                        upperMultiplicity = *
                                                                                                                                lowerMultiplicity = 0
                                                   upperMultiplicity = 1                                                        upperMultiplicity = *
                                                   lowerMultiplicity = 0                                                        lowerMultiplicity = 0
                                                   upperMultiplicity = 1                                                        upperMultiplicity = *
                                                   lowerMultiplicity = 0                                                        lowerMultiplicity = 0
                                                   upperMultiplicity = 1                                                        upperMultiplicity = *
                                                   lowerMultiplicity = 0                                                        lowerMultiplicity = 1
                                                     RteBswPositionInTask :
                                                     EcucIntegerParamDef
                                  +parameter
                                                   upperMultiplicity = 1
                                                   lowerMultiplicity = 0
                                                   min = 0                                                                     +literal            NONE :
                                                   max = 65535                                 RteOsSchedulePoint :                        EcucEnumerationLiteralDef
                                                                                             EcucEnumerationParamDef
                                                                                +parameter
                                                                                                   lowerMultiplicity = 0       +literal
                                                                                                                                                CONDITIONAL :
                                                     RteBswActivationOffset :                      upperMultiplicity = 1                   EcucEnumerationLiteralDef
                                                       EcucFloatParamDef
                                  +parameter
                                                                                                                               +literal
                                                   min = 0                                                                                    UNCONDITIONAL :
                                                   max = INF                                                                               EcucEnumerationLiteralDef
                                                   lowerMultiplicity = 0
                                                   upperMultiplicity = 1
                                                                                      +parameter
                                                                                                        RteBswImmediateRestart :
                                                                                                         EcucBooleanParamDef
                                                 RteBswEventPredecessorSyncPointRef :
                                                                                                        defaultValue = false
                                  +reference              EcucReferenceDef
                                                   upperMultiplicity = 1                     +destination
                                                                                                                     RteSyncPoint :
                                                   lowerMultiplicity = 0
                                                                                                               EcucParamConfContainerDef
                                                                                             +destination
                                                  RteBswEventSuccessorSyncPointRef :                              lowerMultiplicity = 0
                                  +reference                                                                      upperMultiplicity = *
                                                          EcucReferenceDef
                                                   upperMultiplicity = 1
                                                   lowerMultiplicity = 0
                            This parameter shall not be set to true when the mapped BswEvent
                            refers to a BswSchedulableEntitiy which minimumStartInterval attribute
                            is > 0.
 Multiplicity               1
 Type                       EcucBooleanParamDef
 Default Value              false
 Post-Build Variant         false
 Value
 Value Configuration        Pre-compile time              X   All Variants
 Class
                            Link time                     
                            Post-build time               
 Scope / Dependency         scope: local
No Included Containers
RteBswModuleInstance :EcucParamConfContainerDef
                 lowerMultiplicity = 0
                 upperMultiplicity = *
+destination
+subContainer
                 lowerMultiplicity = 0
                 upperMultiplicity = *
                                                                                                     RteBswReleasedTriggerRef :
                                                                                                      EcucForeignReferenceDef
                                                                                  +reference
                                                                                                     lowerMultiplicity = 1
                                                                                                     upperMultiplicity = 1
                                                                                                     destinationType = TRIGGER
                                                                                RteBswRequiredTriggerRef :
                                                                                 EcucForeignReferenceDef
                                                               +reference
                                                                               lowerMultiplicity = 1
                                                                               upperMultiplicity = 1
                                                                               destinationType = TRIGGER
BswModuleTemplate
                                         InternalBehavior
                                                                +triggerDirectImplementation BswTriggerDirectImplementation
                                    BswInternalBehavior
                                                               atpVariation,atpSplitable0..* +     task :Identifier
No Included Containers
This configuration determine the size of the queue queuing the issued triggers.
The RteBswExternalTriggerConfig container and RteBswInternalTrigger-
Config container is defined in the context of the RteBswModuleInstance which
already predefines the context of the provided Trigger / BswInternalTrigger-
ingPoint.
[SWS_Rte_CONSTR_09006] The references RteBswTriggerSourceRef has to
be consistent with the RteBswImplementationRef d The references RteB-
swTriggerSourceRef has to be consistent with the RteBswImplementationRef.
This means the referenced Trigger / BswInternalTriggeringPoint has to be-
                                ARElement
                              AtpBlueprint
                                                                                                        AtpStructureElement
                          AtpBlueprintable
                                                             +releasedTrigger                                    Identifiable
                       AtpStructureElement
                                                                                         TriggerDeclaration::Trigger
     BswOverview::BswModuleDescription        atpVariation,atpSplitable 0..*
                                                                                 +   swImplPolicy :SwImplPolicyEnum [0..1]
     +   moduleId :PositiveInteger [0..1]
atpSplitable
+internalBehavior 0..*
                       InternalBehavior
                                                                                                                                                               Identifiable
              BswBehavior::
                                                                                                                                  BswBehavior::BswInternalTriggeringPoint
           BswInternalBehavior
                                                                                                +internalTriggeringPoint
                                                                 atpVariation,atpSplitable                                  +     swImplPolicy :SwImplPolicyEnum [0..1]
                                                                                                                       0..*
+subContainer
                                                                                                              RteBswTriggerSourceQueueLength :
                                                                                                                    EcucIntegerParamDef
                                                                                                +parameter
                                                                                                                 defaultValue = 0
                                                                                                                 lowerMultiplicity = 1
                                                                                                                 upperMultiplicity = 1
                                                                                                                 min = 0
                                                                                                                 max = 4294967295
+subContainer
                                                                                                               RteBswTriggerSourceQueueLength :
                                                                                                                     EcucIntegerParamDef
                                                                                                +parameter
                                                                                                                 defaultValue = 0
                                                                                                                 lowerMultiplicity = 1
                                                                                                                 upperMultiplicity = 1
                                                                                                                 min = 0
                                                                                                                 max = 4294967295
                (from RTE)
No Included Containers
No Included Containers
mode group. For the provided mode group the tuple of RteBswProvidedModeGrp-
ModInstRef and RteBswProvidedModeGroupRef is specified.
                                                               RteBswModuleInstance :EcucParamConfContainerDef
                  lowerMultiplicity = 0
                  upperMultiplicity = *
                                                                                                    +destination
                   +subContainer
                  lowerMultiplicity = 0
                  upperMultiplicity = *
                                                                                                   RteModeDeclarationMappingSetRef :EcucForeignReferenceDef
                                                                                 +reference
                                                                                                    lowerMultiplicity = 0
                                                                                                    upperMultiplicity = 1
                                                                                                    destinationType = MODE-DECLARATION-MAPPING-SET
                                                                                       RteBswProvidedModeGroupRef :EcucForeignReferenceDef
                                                                     +reference
                                                                                       lowerMultiplicity = 1
                                                                                       upperMultiplicity = 1
                                                                                       destinationType = MODE-DECLARATION-GROUP-PROTOTYPE
                                                                                   RteBswRequiredModeGroupRef :EcucForeignReferenceDef
                                                                 +reference
                                                                                  lowerMultiplicity = 1
                                                                                  upperMultiplicity = 1
                                                                                  destinationType = MODE-DECLARATION-GROUP-PROTOTYPE
BswModuleTemplate
                                                                                                                    isOfType
                                                                                                                           1
                                                                                                                   +type   {redefines atpType}
                                                     +modeDeclaration                                                               ARElement
                               AtpStructureElement                                                                                 AtpBlueprint
                                        Identifiable 1..*   atpVariation                                                     AtpBlueprintable
                           ModeDeclaration                 +initialMode                                                                AtpType
                                                                                                              ModeDeclarationGroup
                   +   value :PositiveInteger [0..1]
                                                           1
                                                                                                   +   onTransitionValue :PositiveInteger [0..1]
          +firstMode        1..* +secondMode           1
                             AtpStructureElement                                                                                                     ARElement
                                      Identifiable +modeDeclarationMapping                                                                             AtpType
                       ModeDeclarationMapping                                                                                     ModeDeclarationMappingSet
                                                   1..*
No Included Containers
RteBswModuleInstance :EcucParamConfContainerDef
          lowerMultiplicity = 0
          upperMultiplicity = *
+destination
+subContainer
          lowerMultiplicity = 0
          upperMultiplicity = *
                                                                                              RteBswProvidedClientServerEntryRef :EcucForeignReferenceDef
                                                                                 +reference
                                                                                                 lowerMultiplicity = 1
                                                                                                 upperMultiplicity = 1
                                                                                                 destinationType = BSW-MODULE-CLIENT-SERVER-ENTRY
RteBswRequiredClientServerEntryRef :EcucForeignReferenceDef
                                                   +reference
                                                                    lowerMultiplicity = 1
                                                                    upperMultiplicity = 1
                                                                    destinationType = BSW-MODULE-CLIENT-SERVER-ENTRY
BswModuleTemplate
No Included Containers
RteBswModuleInstance :EcucParamConfContainerDef
           lowerMultiplicity = 0
           upperMultiplicity = *
+destination
+subContainer
           lowerMultiplicity = 0
           upperMultiplicity = *
                                                                                              RteBswProvidedVariableDataPrototypeRef :
                                                                                                     EcucForeignReferenceDef
                                                                       +reference
                                                                                       lowerMultiplicity = 1
                                                                                       upperMultiplicity = 1
                                                                                       destinationType = VARIABLE-DATA-PROTOTYPE
                                                                            RteBswRequiredVariableDataPrototypeRef :
                                                                                   EcucForeignReferenceDef
                                                       +reference
                                                                      lowerMultiplicity = 1
                                                                      upperMultiplicity = 1
                                                                      destinationType = VARIABLE-DATA-PROTOTYPE
BswModuleTemplate
                                     ARElement                                                                              AutosarDataPrototype
                                                                                              +providedData
                                   AtpBlueprint
                                                                                                                     VariableDataPrototype
                               AtpBlueprintable                 atpVariation,atpSplitable              0..*
                            AtpStructureElement
                  BswModuleDescription                                                         +requiredData
No Included Containers
+reference +reference
                 upperMultiplicity = 1                                                                                upperMultiplicity = 1
                 lowerMultiplicity = 0                                                                                lowerMultiplicity = 0
No Included Containers
aPrototypes. Basically the initialization can be done either by start-up code or by the
Rte_Start function. Further on it is possible to avoid any initialization for data which
has to be reset safe or is explicitly initialized by other SW, e.g. the RAM Blocks might
be initialized by NVRAM Manager.
                                                                                         Software Component Template and BSW Module Description Template
         Rte :EcucModuleDef
                                                                                                                                                     ARElement
           upperMultiplicity = 1                                                                                                                    AtpBlueprint
           lowerMultiplicity = 0                                                                                                                AtpBlueprintable
                                                                                                            AuxillaryObjects::SwAddrMethod
              (from RTE)
       +container
                                                                                     +   memoryAllocationKeywordPolicy :MemoryAllocationKeywordPolicyType [0..1]
                                                                                     +   option :Identifier [0..*]
     RteInitializationBehavior :                  RteSectionInitializationPolicy :   +   sectionInitializationPolicy :SectionInitializationPolicyType [0..1]
    EcucParamConfContainerDef       +parameter        EcucStringParamDef             +   sectionType :MemorySectionType [0..1]
                                                                                                         primitive
       upperMultiplicity = *                         upperMultiplicity = *                            PrimitiveTypes::
       lowerMultiplicity = 1                         lowerMultiplicity = 1                    SectionInitializationPolicyType
      +parameter
                                    +literal
      RteInitializationStrategy :                       RTE_INITIALIZATION_STRATEGY_NONE :EcucEnumerationLiteralDef
     EcucEnumerationParamDef
         upperMultiplicity = 1      +literal
         lowerMultiplicity = 1                 RTE_INITIALIZATION_STRATEGY_AT_DATA_DECLARATION :EcucEnumerationLiteralDef
                                    +literal RTE_INITIALIZATION_STRATEGY_AT_DATA_DECLARATION_AND_PARTITION_RESTART :
                                                                       EcucEnumerationLiteralDef
                                    +literal     RTE_INITIALIZATION_STRATEGY_AT_RTE_START_AND_PARTITION_RESTART :
                                                                        EcucEnumerationLiteralDef
 Multiplicity          1..*
 Type                  EcucStringParamDef
 Default Value
 Regular Expression
 Post-Build Variant    false
 Multiplicity
 Post-Build Variant    false
 Value
 Multiplicity          Pre-compile time               X    All Variants
 Configuration Class
                       Link time                       
                       Post-build time                 
No Included Containers
[SWS_Rte_07075] d The RTE generator shall reject configurations where not all
occurring sectionInitializationPolicy attribute values are configured to an
RteInitializationStrategy. c(SRS_Rte_00018)
The call of Rte_Start may trigger RunnableEntitys for initialization purpose.
Those RunnableEntitys are either triggered by SwcModeSwitchEvents or
InitEvents. To support the scheduling of such RunnableEntitys in the start up
code of the ECU (e.g. by BswM or EcuM) its possible to map such RTEEvents to
RteInitializationRunnableBatch containers which results in the existence of
Rte_Init APIs.
                                 Rte :EcucModuleDef
                                   upperMultiplicity = 1
                                   lowerMultiplicity = 0
+container
                            RteInitializationRunnableBatch :
                             EcucParamConfContainerDef
                                upperMultiplicity = *
                                lowerMultiplicity = 0
+destination
                                   RteUsedInitFnc :
                                  EcucReferenceDef
                                  upperMultiplicity = 1
                                  lowerMultiplicity = 0
+reference
                              RteEventToTaskMapping :                        RtePositionInTask :
                             EcucParamConfContainerDef         +parameter   EcucIntegerParamDef
                                 upperMultiplicity = *                        upperMultiplicity = 1
                                 lowerMultiplicity = 0                        lowerMultiplicity = 0
                                                                              min = 0
                                                                              max = 65535
No Included Containers
Rte_Init API may only schedule RunnableEntitys for initialization purpose ore
which are on-entry Runnable Entities.
[SWS_Rte_CONSTR_09063] Restricted kinds of RTEEvents which may
mapped to RteInitializationRunnableBatch containers d Only SwcMod-
eSwitchEvents with activation = onEntry and referring to the initialMode or
InitEvents may be mapped to RteInitializationRunnableBatch containers
with the means of a RteUsedInitFnc reference. c()
[SWS_Rte_06769] d The RTE Generator shall reject configurations vio-
lating [SWS_Rte_CONSTR_09063].  c(SRS_Rte_00143, SRS_Rte_00240,
SRS_Rte_00018)
[SWS_Rte_CONSTR_09064] A single RteInitializationRunnableBatch con-
tainer may not handle RTEEvents of different partitions d All RTEEvents
mapped to a RteInitializationRunnableBatch container may only trigger
RunnableEntitys belonging to the same partition. c()
[SWS_Rte_06770] d The RTE Generator shall reject configurations vio-
lating [SWS_Rte_CONSTR_09064].  c(SRS_Rte_00143, SRS_Rte_00240,
SRS_Rte_00018)
A      Metamodel Restrictions
This chapter lists all the restrictions to the AUTOSAR meta-model this version of the
AUTOSAR RTE specification document relies on. The RTE generator shall reject con-
figuration where any of the specified restrictions are violated.
              max. value)? Needs might differ out of user view? Data interpretation is
              ambiguous.
          Compared e.g. to sender-receiver last-is-best approach only inefficient so-
           lutions are possible because implementation of queues entails storage of
           information dynamically at different memory locations. So always additional
           copies are required.
  2. [SWS_Rte_03970] d The RTE generator shall reject configurations violating [con-
     str_1092] so containing require ports attached to ParameterSwComponent-
     Types. c(SRS_Rte_00154, SRS_Rte_00156, SRS_Rte_00018)
      Rationale: Require ports on ParameterSwComponentTypes dont make
      sense. ParameterSwComponentTypes only have to provide calibration param-
      eters to other SwComponentTypes.
      Rational: This is required to generated unique names for the Application Header
      Files and component data structures.
  2. [SWS_Rte_07191] d The RTE generator shall reject configurations where a
     SwComponentType has PortPrototypes typed by different PortInter-
     faces with equal short name but conflicting ApplicationErrors. Applica-
     tionErrors are conflicting if ApplicationErrors with same name do have
     different errorCodes. c(SRS_Rte_00018)
      Rational: This is required to generated unique symbolic names for Applica-
      tionErrors. (see also [SWS_Rte_02576])
B     External Requirements
A summary on model constraints is provided in document [34].
C     MISRA C Compliance
In general, all RTE code, whether generated or not, shall conform to the MISRA C
standard [SWS_Rte_01168] [27]. This chapter lists all the MISRA C rules that may be
violated by the generated RTE.
The MISRA C standard was defined with having mainly hand-written code in mind. Part
of the MISRA C rules only apply to hand-written code, they do not make much sense
in the context of automatic code generation. Additionally, there are some rules that are
violated because of technical reasons, mainly to reduce RTE overhead.
The rules listed in this chapter are expected to be violated by RTE code. Violations to
the rules listed here do not need to be documented as non-compliant to MISRA C in
the generated code itself.
 MISRA rule     2.3
 Description    A project should not contain unused type declarations.
 Violations     This is in support of [SWS_Rte_02648].
              ARPackages are open sets. This means that in a file based description system
              multiple files can be used to partially describe the contents of a package.
                                                Stereotypes: atpSplitable
                                                Tags: atp.Splitkey=shortLabel
                                                xml.sequenceOffset=10
 Class        ApplicationArrayDataType
 Package      M2::AUTOSARTemplates::SWComponentTemplate::Datatype::Datatypes
 Note         An application data type which is an array, each element is of the same application
              data type.
              Tags: atp.recommendedPackage=ApplicationDataTypes
 Base         ARElement, ARObject, ApplicationCompositeDataType, ApplicationDataType, Atp
              Blueprint, AtpBlueprintable, AtpClassifier, AtpType, AutosarDataType, Collectable
              Element, Identifiable, MultilanguageReferrable, PackageableElement, Referrable
 Attribute    Type                Mul. Kind Note
 dynamicAr    String               0..1     attr  Specifies the profile which the array will follow if it
 raySizePro                                       is a variable size array.
 file
 element      ApplicationArray      1      aggr    This association implements the concept of an
              Element                              array element. That is, in some cases it is
                                                   necessary to be able to identify single array
                                                   elements, e.g. as input values for an interpolation
                                                   routine.
 Class        ApplicationArrayElement
 Package      M2::AUTOSARTemplates::SWComponentTemplate::Datatype::DataPrototypes
 Note         Describes the properties of the elements of an application array data type.
 Base         ARObject, ApplicationCompositeElementDataPrototype, AtpFeature, AtpPrototype,
              DataPrototype, Identifiable, MultilanguageReferrable, Referrable
 Attribute    Type               Mul. Kind Note
 arraySizeH   ArraySizeHandli    0..1      attr    The way how the size of the array is handled.
 andling      ngEnum
 arraySizeS   ArraySizeSema      0..1      attr    This attribute controls how the information about
 emantics     nticsEnum                            the array size shall be interpreted.
 indexData    ApplicationPrimi   0..1      ref     This reference can be taken to assign a
 Type         tiveDataType                         CompuMethod of category TEXTTABLE to the
                                                   array. The texttable entries associate a textual
                                                   value to an index number such that the element
                                                   with that index number is represented by a
                                                   symbolic name.
 maxNumb      PositiveInteger    0..1      attr    The maximum number of elements that the array
 erOfEleme                                         can contain.
 nts
                                                   Stereotypes: atpVariation
                                                   Tags: vh.latestBindingTime=preCompileTime
              It should be possible to model the application level aspects of a VFB system by using
              ApplicationDataTypes only.
 Base         ARElement, ARObject, AtpBlueprint, AtpBlueprintable, AtpClassifier, AtpType,
              AutosarDataType, CollectableElement, Identifiable, MultilanguageReferrable,
              PackageableElement, Referrable
 Attribute    Type                Mul. Kind Note
                                              
 Class        ApplicationError
 Package      M2::AUTOSARTemplates::SWComponentTemplate::PortInterface
 Note         This is a user-defined error that is associated with an element of an AUTOSAR
              interface. It is specific for the particular functionality or service provided by the
              AUTOSAR software component.
 Base         ARObject, Identifiable, MultilanguageReferrable, Referrable
 Attribute    Type                  Mul. Kind Note
 errorCode    Integer                  1       attr   The RTE generator is forced to assign this value
                                                      to the corresponding error symbol. Note that for
                                                      error codes certain ranges are predefined (see
                                                      RTE specification).
 Class        ApplicationPrimitiveDataType
 Package      M2::AUTOSARTemplates::SWComponentTemplate::Datatype::Datatypes
 Note         A primitive data type defines a set of allowed values.
              Tags: atp.recommendedPackage=ApplicationDataTypes
 Base         ARElement, ARObject, ApplicationDataType, AtpBlueprint, AtpBlueprintable, Atp
              Classifier, AtpType, AutosarDataType, CollectableElement, Identifiable, Multilanguage
              Referrable, PackageableElement, Referrable
 Attribute    Type                Mul. Kind Note
                                            
 Class        ApplicationRecordDataType
 Package      M2::AUTOSARTemplates::SWComponentTemplate::Datatype::Datatypes
 Note         An application data type which can be decomposed into prototypes of other
              application data types.
              Tags: atp.recommendedPackage=ApplicationDataTypes
 Base         ARElement, ARObject, ApplicationCompositeDataType, ApplicationDataType, Atp
              Blueprint, AtpBlueprintable, AtpClassifier, AtpType, AutosarDataType, Collectable
              Element, Identifiable, MultilanguageReferrable, PackageableElement, Referrable
 Attribute    Type                Mul. Kind Note
 element      ApplicationReco      1..*    aggr Specifies an element of a record.
 (ordered)    rdElement
                                                  The aggregation of ApplicationRecordElement is
                                                  subject to variability with the purpose to support
                                                  the conditional existence of elements inside a
                                                  ApplicationrecordDataType.
                                                   Stereotypes: atpVariation
                                                   Tags: vh.latestBindingTime=preCompileTime
 Class         ApplicationRecordElement
 Package       M2::AUTOSARTemplates::SWComponentTemplate::Datatype::DataPrototypes
 Note          Describes the properties of one particular element of an application record data type.
 Base          ARObject, ApplicationCompositeElementDataPrototype, AtpFeature, AtpPrototype,
               DataPrototype, Identifiable, MultilanguageReferrable, Referrable
 Attribute     Type               Mul. Kind Note
                                                
 Class         ApplicationRuleBasedValueSpecification
 Package       M2::AUTOSARTemplates::CommonStructure::Constants
 Note          This meta-class represents rule based values for DataPrototypes typed by
               ApplicationDataTypes (ApplicationArrayDataType or a compound
               ApplicationPrimitiveDataType which also boils down to an array-nature).
 Base          ARObject, AbstractRuleBasedValueSpecification, ValueSpecification
 Attribute     Type                Mul. Kind Note
 category      Identifier           1      attr  This represents the category of the
                                                 RuleBasedValueSpecification
                                                  Tags: xml.sequenceOffset=-20
 swAxisCon     RuleBasedAxis        *     aggr    This represents the axis values of a Compound
 t (ordered)   Cont                               Primitive Data Type (curve or map).
 Class         ApplicationSwComponentType
 Package       M2::AUTOSARTemplates::SWComponentTemplate::Components
 Note          The ApplicationSwComponentType is used to represent the application software.
               Tags: atp.recommendedPackage=SwComponentTypes
 Base          ARElement, ARObject, AtomicSwComponentType, AtpBlueprint, AtpBlueprintable,
               AtpClassifier, AtpType, CollectableElement, Identifiable, MultilanguageReferrable,
               PackageableElement, Referrable, SwComponentType
 Attribute     Type                Mul. Kind Note
                                              
 Class         ApplicationValueSpecification
 Package       M2::AUTOSARTemplates::CommonStructure::Constants
 Note          This meta-class represents values for DataPrototypes typed by ApplicationDataTypes
               (this includes in particular compound primitives).
               For further details refer to ASAM CDF 2.0. This meta-class corresponds to some
               extent with SW-INSTANCE in ASAM CDF 2.0.
 Base          ARObject, ValueSpecification
 Attribute     Type                 Mul. Kind Note
 category      Identifier             1      attr Specifies to which category of
                                                  ApplicationDataType this
                                                  ApplicationValueSpecification can be applied (e.g.
                                                  as an initial value), thus imposing constraints on
                                                  the structure and semantics of the contained
                                                  values, see [constr_1006] and [constr_2051].
 swAxisCon     SwAxisCont             *      aggr This represents the axis values of a Compound
 t (ordered)                                      Primitive Data Type (curve or map).
 Class         ArgumentDataPrototype
 Package       M2::AUTOSARTemplates::SWComponentTemplate::PortInterface
 Note          An argument of an operation, much like a data element, but also carries direction
               information and is owned by a particular ClientServerOperation.
 Base          ARObject, AtpFeature, AtpPrototype, AutosarDataPrototype, DataPrototype,
               Identifiable, MultilanguageReferrable, Referrable
 Attribute     Type                  Mul. Kind Note
 direction     ArgumentDirecti        1    attr   This attribute specifies the direction of the
               onEnum                             argument prototype.
 serverArgu    ServerArgument        0..1  attr   This defines how the argument type of the servers
 mentImplP     ImplPolicyEnum                     RunnableEntity is implemented.
 olicy
                                                  If the attribute is not defined this has the same
                                                  semantics as if the attribute is set to the value
                                                  useArgumentType for primitive arguments and
                                                  structures and to the value useArrayBaseType for
                                                  arrays.
 Enumeration     ArgumentDirectionEnum
 Package         M2::AUTOSARTemplates::GenericStructure::GeneralTemplateClasses::Primitive
                 Types
 Literal          Description
 in               The argument value is passed to the callee.
                  Tags: atp.EnumerationValue=0
 inout            The argument value is passed to the callee but also passed back from the callee to
                  the caller.
                  Tags: atp.EnumerationValue=1
 out              The argument value is passed from the callee to the caller.
Tags: atp.EnumerationValue=2
 Enumeration      ArraySizeSemanticsEnum
 Package          M2::AUTOSARTemplates::CommonStructure::ImplementationDataTypes
 Note             This type controls how the information about the number of elements in an
                  ApplicationArrayDataType is to be interpreted.
 Literal          Description
 fixedSize        This means that the ApplicationArrayDataType will always have a fixed number of
                  elements.
                  Tags: atp.EnumerationValue=0
 variableSize     This implies that the actual number of elements in the ApplicationArrayDataType
                  might vary at run-time. The value of arraySize represents the maximum number of
                  elements in the array.
Tags: atp.EnumerationValue=1
 Class          ArrayValueSpecification
 Package        M2::AUTOSARTemplates::CommonStructure::Constants
 Note           Specifies the values for an array.
 Base           ARObject, CompositeValueSpecification, ValueSpecification
 Attribute      Type                Mul. Kind Note
                                                 Stereotypes: atpVariation
                                                 Tags: vh.latestBindingTime=preCompileTime
 Class        AssemblySwConnector
 Package      M2::AUTOSARTemplates::SWComponentTemplate::Composition
 Note         AssemblySwConnectors are exclusively used to connect SwComponentPrototypes in
              the context of a CompositionSwComponentType.
 Base         ARObject, AtpClassifier, AtpFeature, AtpStructureElement, Identifiable,
              MultilanguageReferrable, Referrable, SwConnector
 Attribute    Type               Mul. Kind Note
 provider     AbstractProvide     0..1    iref  Instance of providing port.
              dPortPrototype
 requester    AbstractRequire     0..1    iref  Instance of requiring port.
              dPortPrototype
 Class        AsynchronousServerCallPoint
 Package      M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior::ServerCall
 Note         An AsynchronousServerCallPoint is used for asynchronous invocation of a
              ClientServerOperation. IMPORTANT: a ServerCallPoint cannot be used concurrently.
              Once the client RunnableEntity has made the invocation, the ServerCallPoint cannot
              be used until the call returns (or an error occurs!) at which point the ServerCallPoint
              becomes available again.
 Base         ARObject, AbstractAccessPoint, AtpClassifier, AtpFeature, AtpStructureElement,
              Identifiable, MultilanguageReferrable, Referrable, ServerCallPoint
 Attribute    Type                  Mul. Kind Note
                                               
 Class        AsynchronousServerCallResultPoint
 Package      M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior::ServerCall
 Note         If a RunnableEntity owns a AsynchronousServerCallResultPoint it is entitled to get
              the result of the referenced AsynchronousServerCallPoint. If it is associated with
              AsynchronousServerCallReturnsEvent, this RTEEvent notifies the completion of the
              required ClientServerOperation or a timeout. The occurrence of this event can either
              unblock a WaitPoint or can lead to the invocation of a RunnableEntity.
 Base         ARObject, AbstractAccessPoint, AtpClassifier, AtpFeature, AtpStructureElement,
              Identifiable, MultilanguageReferrable, Referrable
 Attribute    Type                  Mul. Kind Note
 asynchron    AsynchronousS          1      ref   The referenced Asynchronous Server Call Point
 ousServer    erverCallPoint                      defines the asynchronous server call from which
 CallPoint                                        the results are returned.
 Class        AsynchronousServerCallReturnsEvent
 Package      M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior::RTE
              Events
 Note         This event is raised when an asynchronous server call is finished.
 Base         ARObject, AbstractEvent, AtpClassifier, AtpFeature, AtpStructureElement,
              Identifiable, MultilanguageReferrable, RTEEvent, Referrable
 Attribute    Type                  Mul. Kind Note
 eventSour    AsynchronousS          1    ref    The referenced
 ce           erverCallResult                    AsynchronousServerCallResultPoint which is
              Point                              raises the RTEEvent in case of returning
                                                 asynchronous server call.
                                                  Stereotypes: atpSplitable
                                                  Tags: atp.Splitkey=shortName
                                                  Tags: xml.attribute=true
 blueprintV   String              0..1     attr   This represents a description that documents how
 alue                                             the value shall be defined when deriving objects
                                                  from the blueprint.
                                                  Tags: xml.attribute=true
 sd           String              0..1     attr   This special data is provided to allow
                                                  synchronization of Attribute value variation points
                                                  with variant management systems. The usage is
                                                  subject of agreement between the involved
                                                  parties.
                                                  Tags: xml.attribute=true
 shortLabel   PrimitiveIdentifi   0..1     attr   This allows to identify the variation point. It is also
              er                                  intended to allow RTE support for CompileTime
                                                  Variation points.
Tags: xml.attribute=true
 Class        BackgroundEvent
 Package      M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior::RTE
              Events
 Note         This event is used to trigger RunnableEntities that are supposed to be executed in the
              background.
 Base         ARObject, AbstractEvent, AtpClassifier, AtpFeature, AtpStructureElement,
              Identifiable, MultilanguageReferrable, RTEEvent, Referrable
 Attribute    Type                  Mul. Kind Note
                                             
 Class        BaseTypeDirectDefinition
 Package      M2::MSR::AsamHdo::BaseTypes
 Note         This BaseType is defined directly (as opposite to a derived BaseType)
 Base         ARObject, BaseTypeDefinition
 Attribute    Type               Mul. Kind Note
 baseType     BaseTypeEnco         1      attr    This specifies, how an object of the current
 Encoding     dingString                          BaseType is encoded, e.g. in an ECU within a
                                                  message sequence.
                                                Tags: xml.sequenceOffset=90
 baseType     PositiveInteger    0..1    attr   Describes the length of the data type specified in
 Size                                           the container in bits.
                                                Tags: xml.sequenceOffset=70
 byteOrder    ByteOrderEnum      0..1    attr   This attribute specifies the byte order of the base
                                                type.
                                                Tags: xml.sequenceOffset=110
 maxBaseT     PositiveInteger    0..1    attr   Describes the maximum length of the BaseType in
 ypeSize                                        bits.
                                                Tags: xml.sequenceOffset=80
 memAlign     PositiveInteger    0..1    attr   This attribute describes the alignment of the
 ment                                           memory object in bits. E.g. "8" specifies, that the
                                                object in question is aligned to a byte while "32"
                                                specifies that it is aligned four byte. If the value is
                                                set to "0" the meaning shall be interpreted as
                                                "unspecified".
Tags: xml.sequenceOffset=100
                                                  BaseType with
                                                    shortName: "MyUnsignedInt"
                                                    nativeDeclaration: "unsigned short"
                                                  Results in
                                                   typedef unsigned short MyUnsignedInt;
Tags: xml.sequenceOffset=120
 Enumeration     BindingTimeEnum
 Package         M2::AUTOSARTemplates::GenericStructure::VariantHandling
 Note            This enumerator specifies the applicable binding times for the pre build variation
                 points.
 Literal         Description
 codeGenera-
 tionTime
                      Coding by hand, based on requirements document.
                      Tool based code generation, e.g. from a model.
                      The model may contain variants.
                      Only code for the selected variant(s) is actually generated.
                 Tags: atp.EnumerationValue=0
 linkTime        Configure what is included in object code, and what is omitted Based on which
                 variant(s) are selected E.g. for modules that are delivered as object code (as
                 opposed to those that are delivered as source code)
Tags: atp.EnumerationValue=1
 preCompile     This is typically the C-Preprocessor. Exclude parts of the code from the
 Time           compilation process, e.g., because they are not required for the selected variant,
                because they are incompatible with the selected variant, because they require
                resources that are not present in the selected variant. Object code is only
                generated for the selected variant(s). The code that is excluded at this stage code
                will not be available at later stages.
                Tags: atp.EnumerationValue=2
 systemDe-
 signTime
                     Designing the VFB.
                     Software Component types (PortInterfaces).
                     SWC Prototypes and the Connections between SWCprototypes.
                     Designing the Topology
                     ECUs and interconnecting Networks
                     Designing the Communication Matrix and Data Mapping
Tags: atp.EnumerationValue=3
 Class         BswAsynchronousServerCallPoint
 Package       M2::AUTOSARTemplates::BswModuleTemplate::BswBehavior
 Note          Represents an asynchronous procedure call point via the BSW Scheduler.
 Base          ARObject, BswModuleCallPoint, Referrable
 Attribute     Type              Mul. Kind Note
 calledEntry   BswModuleClie      1     ref    The entry to be called.
               ntServerEntry
 Class         BswAsynchronousServerCallResultPoint
 Package       M2::AUTOSARTemplates::BswModuleTemplate::BswBehavior
 Note          The callback point for an BswAsynchronousServerCallPoint i.e. the point at which the
               result can be retrieved from the BSW Scheduler.
 Base          ARObject, BswModuleCallPoint, Referrable
 Attribute     Type                 Mul. Kind Note
 asynchron     BswAsynchrono         1       ref  The call point invoking the call to which the result
 ousServer     usServerCallPoi                    belongs.
 CallPoint     nt
 Class         BswBackgroundEvent
 Package       M2::AUTOSARTemplates::BswModuleTemplate::BswBehavior
 Note          A recurring BswEvent which is used to perform background activities. It is similar to a
               BswTimingEvent but has no fixed time period and is activated only with low priority.
 Base          ARObject, AbstractEvent, BswEvent, BswScheduleEvent, Identifiable, Multilanguage
               Referrable, Referrable
 Attribute     Type               Mul. Kind Note
                                             
 Class         BswCalledEntity
 Package       M2::AUTOSARTemplates::BswModuleTemplate::BswBehavior
 Note          BSW module entity which is designed to be called from another BSW module or
               cluster.
 Base          ARObject, BswModuleEntity, ExecutableEntity, Identifiable, MultilanguageReferrable,
               Referrable
 Attribute     Type              Mul. Kind Note
                                            
 Class        BswDataReceivedEvent
 Package      M2::AUTOSARTemplates::BswModuleTemplate::BswBehavior
 Note         This event is thrown on reception of the referenced data via
              Sender-Receiver-Communication over the BSW Scheduler.
 Base         ARObject, AbstractEvent, BswEvent, BswScheduleEvent, Identifiable, Multilanguage
              Referrable, Referrable
 Attribute    Type                Mul. Kind Note
 data         VariableDataPr        1     ref    The received data.
              ototype
 Class           BswExclusiveAreaPolicy
 Package         M2::AUTOSARTemplates::BswModuleTemplate::BswBehavior
 Note            The ExclusiveArea for which the BSW Scheduler using this policy.
 Base            ARObject, BswApiOptions
 Attribute       Type              Mul. Kind Note
 apiPrincipl     ApiPrincipleEnu    0..1    attr   Specifies for this ExclusiveArea if either one
 e               m                                 common set of Enter and Exit APIs for the whole
                                                   BSW module is requested from the SchM or if the
                                                   set of Enter and Exit APIs is expected per
                                                   BswModuleEntity. The default value is "common".
 exclusiveA      ExclusiveArea       1      ref    The ExclusiveArea for which the BSW Scheduler
 rea                                               using this policy.
 Enumeration       BswExecutionContext
 Package           M2::AUTOSARTemplates::BswModuleTemplate::BswInterfaces
 Note              Specifies the execution context required or guaranteed for the call associated with
                   this service.
 Literal           Description
 hook              Context of an OS "hook" routine always
                   Tags: atp.EnumerationValue=0
 interruptCat1     CAT1 interrupt context always
                   Tags: atp.EnumerationValue=1
 interruptCat2     CAT2 interrupt context always
                   Tags: atp.EnumerationValue=2
 task              Task context always
                   Tags: atp.EnumerationValue=3
 unspecified       The execution context is not specified by the API
Tags: atp.EnumerationValue=4
 Class           BswExternalTriggerOccurredEvent
 Package         M2::AUTOSARTemplates::BswModuleTemplate::BswBehavior
 Note            A BswEvent resulting from a trigger released by another module or cluster.
 Base            ARObject, AbstractEvent, BswEvent, BswScheduleEvent, Identifiable, Multilanguage
                 Referrable, Referrable
 Attribute       Type               Mul. Kind Note
 trigger         Trigger              1     ref     The trigger associated with this event. The trigger
                                                    is external to this module.
 Class         BswImplementation
 Package       M2::AUTOSARTemplates::BswModuleTemplate::BswImplementation
 Note          Contains the implementation specific information in addition to the generic
               specification (BswModuleDescription and BswBehavior). It is possible to have several
               different BswImplementations referring to the same BswBehavior.
               Tags: atp.recommendedPackage=BswImplementations
 Base          ARElement, ARObject, CollectableElement, Identifiable, Implementation,
               MultilanguageReferrable, PackageableElement, Referrable
 Attribute     Type              Mul. Kind Note
 arRelease     RevisionLabelSt     1      attr  Version of the AUTOSAR Release on which this
 Version       ring                             implementation is based. The numbering contains
                                                three levels (major, minor, revision) which are
                                                defined by AUTOSAR.
 behavior      BswInternalBeh      1      ref   The behavior of this implementation.
               avior
                                                This relation is made as an association because
                                                      it follows the pattern of the SWCT
                                                      since ARElement cannot be splitted, but we
                                                       want supply the implementation later, the
                                                       BswImplementation is not aggregated in
                                                       BswBehavior
                                                 Tags: xml.roleWrapperElement=true
 recommen      EcucModuleCo         *      ref   Reference to one or more sets of recommended
 dedConfig     nfigurationValue                  configuration values for this module or module
 uration       s                                 cluster.
Tags: xml.roleWrapperElement=true
 Class         BswInternalBehavior
 Package       M2::AUTOSARTemplates::BswModuleTemplate::BswBehavior
 Note          Specifies the behavior of a BSW module or a BSW cluster w.r.t. the code entities
               visible by the BSW Scheduler. It is possible to have several different
               BswInternalBehaviors referring to the same BswModuleDescription.
 Base          ARObject, AtpClassifier, AtpFeature, AtpStructureElement, Identifiable, Internal
               Behavior, MultilanguageReferrable, Referrable
 Attribute     Type               Mul. Kind Note
                                                Stereotypes: atpSplitable
                                                Tags: atp.Splitkey=includedDataTypeSet
                                                  Stereotypes: atpSplitable
                                                  Tags: atp.Splitkey=shortName
 Class         BswInternalTriggerOccurredEvent
 Package       M2::AUTOSARTemplates::BswModuleTemplate::BswBehavior
 Note          A BswEvent, which can happen sporadically. The event is activated by explicit calls
               from the module to the BSW Scheduler. The main purpose for such an event is to
               cause a context switch, e.g. from an ISR context into a task context. Activation and
               switching are handled within the same module or cluster only.
 Base          ARObject, AbstractEvent, BswEvent, BswScheduleEvent, Identifiable, Multilanguage
               Referrable, Referrable
 Attribute     Type               Mul. Kind Note
 eventSour     BswInternalTrig      1       ref   The activation point is the source of this event.
 ce            geringPoint
 Class         BswInternalTriggeringPoint
 Package       M2::AUTOSARTemplates::BswModuleTemplate::BswBehavior
 Note          Represents the activation point for one or more BswInternalTriggerOccurredEvents.
 Base          ARObject, Identifiable, MultilanguageReferrable, Referrable
 Attribute     Type                Mul. Kind Note
 swImplPoli    SwImplPolicyEn      0..1      attr  This attribute, when set to value queued, specifies
 cy            um                                  a queued processing of the internal trigger event.
 Class         BswInterruptEntity
 Package       M2::AUTOSARTemplates::BswModuleTemplate::BswBehavior
 Note          BSW module entity, which is designed to be triggered by an interrupt.
 Base          ARObject, BswModuleEntity, ExecutableEntity, Identifiable, MultilanguageReferrable,
               Referrable
 Attribute     Type              Mul. Kind Note
 interruptCa   BswInterruptCat     1      attr   Category of the interrupt
 tegory        egory
 interruptSo   String              1      attr   Allows a textual documentation of the intended
 urce                                            interrupt source.
 Class         BswModeReceiverPolicy
 Package       M2::AUTOSARTemplates::BswModuleTemplate::BswBehavior
 Note          Specifies the details for the reception of a mode switch for the referred mode group.
 Base          ARObject
 Attribute     Type                 Mul. Kind Note
 enhanced      Boolean              0..1      attr  This controls the creation of the enhanced mode
 ModeApi                                            API that returns information about the previous
                                                    mode and the next mode. If set to TRUE the
                                                    enhanced mode API is supposed to be generated.
                                                    For more details please refer to the SWS_RTE.
 Class        BswModeSenderPolicy
 Package      M2::AUTOSARTemplates::BswModuleTemplate::BswBehavior
 Note         Specifies the details for the sending of a mode switch for the referred mode group.
 Base         ARObject
 Attribute    Type                 Mul. Kind Note
 ackReques    BswModeSwitc         0..1     aggr Request for acknowledgement
 t            hAckRequest
 enhanced     Boolean              0..1     attr   This controls the creation of the enhanced mode
 ModeApi                                           API that returns information about the previous
                                                   mode and the next mode. If set to TRUE the
                                                   enhanced mode API is supposed to be generated.
                                                   For more details please refer to the SWS_RTE.
 providedM    ModeDeclaratio         1       ref   The provided mode group for which the policy is
 odeGroup     nGroupPrototyp                       specified.
              e
 queueLeng    PositiveInteger        1      attr   Length of call queue on the sender side. The
 th                                                queue is implemented by the RTE
                                                   resp.BswScheduler. The value must be greater or
                                                   equal to 0. Setting the value of queueLength to 0
                                                   implies non-queued communication.
 Class        BswModeSwitchAckRequest
 Package      M2::AUTOSARTemplates::BswModuleTemplate::BswBehavior
 Note         Requests acknowledgements that a mode switch has been processed successfully
 Base         ARObject
 Attribute    Type             Mul. Kind Note
 timeout      TimeValue         1     attr    Number of seconds before an error is reported.
 Class        BswModeSwitchEvent
 Package      M2::AUTOSARTemplates::BswModuleTemplate::BswBehavior
 Note         A BswEvent resulting from a mode switch.
 Base         ARObject, AbstractEvent, BswEvent, BswScheduleEvent, Identifiable, Multilanguage
              Referrable, Referrable
 Attribute    Type               Mul. Kind Note
 activation   ModeActivation       1     attr  Kind of activation w.r.t. to the referred mode.
              Kind
 mode (or-    ModeDeclaratio      1..2   iref  Reference to one or two Modes that initiate the
 dered)       n                                Mode Switch Event.
 Class        BswModeSwitchedAckEvent
 Package      M2::AUTOSARTemplates::BswModuleTemplate::BswBehavior
 Note         The event is raised after a switch of the referenced mode group has been
              acknowledged or an error occurs. The referenced mode group must be provided by
              this module.
 Base         ARObject, AbstractEvent, BswEvent, BswScheduleEvent, Identifiable, Multilanguage
              Referrable, Referrable
 Attribute    Type                Mul. Kind Note
 modeGrou     ModeDeclaratio        1      ref     A mode group provided by this module. The
 p            nGroupPrototyp                       acknowledgement of a switch of this group raises
              e                                    this event.
 Class        BswModuleClientServerEntry
 Package      M2::AUTOSARTemplates::BswModuleTemplate::BswInterfaces
 Note         This meta-class represents a single API entry into the BSW module or cluster that
              has the ability to be called in client-server fashion via the BSW Scheduler.
              In this regard it is more special than BswModuleEntry and can be seen as a wrapper
              around the BswModuleEntry to which it refers (property encapsulatedEntry).
              Tags: atp.recommendedPackage=BswModuleEntrys
 Base         ARObject, Referrable
 Attribute    Type              Mul. Kind Note
 encapsulat   BswModuleEntr       1   ref  The underlying BswModuleEntry.
 edEntry      y
                                           Tags: xml.sequenceOffset=5
 isReentran   Boolean            0..1 attr Reentrancy from the viewpoint of clients invoking
 t                                         the service via the BSW Scheduler:
                                                     True: Enables the service to be invoked
                                                      again, before the service has finished.
                                                     False: It is prohibited to invoke the service
                                                      again before is has finished.
                                                Tags: xml.sequenceOffset=10
 isSynchron   Boolean            0..1    attr   Synchronicity from the viewpoint of clients
 ous                                            invoking the service via the BSW Scheduler:
                                                     True: This calls a synchronous service, i.e.
                                                      the service is completed when the call
                                                      returns.
                                                     False: The service (on semantical level)
                                                      may not be complete when the call returns.
Tags: xml.sequenceOffset=15
 Class        BswModuleDependency
 Package      M2::AUTOSARTemplates::BswModuleTemplate::BswInterfaces
 Note         This class collects the dependencies of a BSW module or cluster on a certain other
              BSW module.
 Base         ARObject, Identifiable, MultilanguageReferrable, Referrable
 Attribute    Type                 Mul. Kind Note
                                                Stereotypes: atpSplitable
                                                Tags: atp.Splitkey=shortName; atp.
                                                Status=removed
                                                xml.sequenceOffset=20
 targetMod    PositiveInteger    0..1    attr   AUTOSAR identifier of the target module of which
 uleId                                          the dependencies are defined.
                                                Tags: xml.sequenceOffset=5
 targetMod    BswModuleDes       0..1     ref   Reference to the target module. It is an
 uleRef       cription                          atpUriDef because the reference shall be used
                                                to identify the target module without actually
                                                needing the description of that target module.
 Class        BswModuleDescription
 Package      M2::AUTOSARTemplates::BswModuleTemplate::BswOverview
 Note         Root element for the description of a single BSW module or BSW cluster. In case it
              describes a BSW module, the short name of this element equals the name of the
              BSW module.
              Tags: atp.recommendedPackage=BswModuleDescriptions
 Base         ARElement, ARObject, AtpBlueprint, AtpBlueprintable, AtpClassifier, AtpFeature, Atp
              StructureElement, CollectableElement, Identifiable, MultilanguageReferrable,
              PackageableElement, Referrable
 Attribute    Type               Mul. Kind Note
                                              Stereotypes: atpSplitable
                                              Tags: atp.Splitkey=shortName
                                              xml.sequenceOffset=65
 moduleId     PositiveInteger   0..1   attr   Refers to the BSW Module Identifier defined by
                                              the AUTOSAR standard. For non-standardized
                                              modules, a proprietary identifier can be optionally
                                              chosen.
Tags: xml.sequenceOffset=5
                                                Stereotypes: atpVariation
                                                Tags: vh.latestBindingTime=preCompileTime
 activationP   BswInternalTrig     *      ref   Activation point used by the module entity to
 oint          geringPoint                      activate one or more internal triggers.
                                                Stereotypes: atpVariation
                                                Tags: vh.latestBindingTime=preCompileTime
 callPoint     BswModuleCall       *     aggr   A call point used in the code of this entitiy.
               Point
                                                The variablity of this association is especially
                                                targeted at debug scenarios: It is possible to have
                                                one variant calling into the AUTOSAR debug
                                                module and another one which doesnt.
                                                Stereotypes: atpVariation
                                                Tags: vh.latestBindingTime=preCompileTime
 calledEntry   BswModuleEntr       *      ref   The entry of another (or the same) BSW module
               y                                which is called by this entry (usually via C function
                                                call). This information allows to set up a model of
                                                call chains.
                                                Stereotypes: atpVariation
                                                Tags: atp.Status=removed
                                                vh.latestBindingTime=preCompileTime
 dataReceiv    BswVariableAcc      *     aggr   The data is received via the BSW Scheduler.
 ePoint        ess
                                                Stereotypes: atpVariation
                                                Tags: vh.latestBindingTime=preCompileTime
 dataSendP     BswVariableAcc      *     aggr   The data is sent via the BSW Scheduler.
 oint          ess
                                                Stereotypes: atpVariation
                                                Tags: vh.latestBindingTime=preCompileTime
                                                Stereotypes: atpVariation
                                                Tags: vh.latestBindingTime=preCompileTime
 managedM     ModeDeclaratio       *      ref   A mode group which is managed by this entity. It
 odeGroup     nGroupPrototyp                    must be a ModeDeclarationGroupPrototype
              e                                 provided by this module or cluster.
                                                Stereotypes: atpVariation
                                                Tags: vh.latestBindingTime=preCompileTime
 scheduler    BswSchedulerN      0..1     ref   A prefix to be used in generated names for the
 NamePrefi    amePrefix                         BswModuleScheduler in the context of this
 x                                              BswModuleEntity, for example entry point
                                                prototypes, macros for dealing with exclusive
                                                areas, header file names.
 Class        BswModuleEntry
 Package      M2::AUTOSARTemplates::BswModuleTemplate::BswInterfaces
 Note         This class represents a single API entry (C-function prototype) into the BSW module
              or cluster.
              The name of the C-function is equal to the short name of this element with one
              exception: In case of multiple instances of a module on the same CPU, special rules
              for "infixes" apply, see description of class BswImplementation.
              Tags: atp.recommendedPackage=BswModuleEntrys
 Base         ARElement, ARObject, AtpBlueprint, AtpBlueprintable, CollectableElement,
              Identifiable, MultilanguageReferrable, PackageableElement, Referrable
 Attribute    Type                  Mul. Kind Note
 argument     SwServiceArg           *    aggr An argument belonging to this BswModuleEntry.
 (ordered)
                                                Stereotypes: atpVariation
                                                Tags: vh.latestBindingTime=blueprintDerivation
                                                Time
                                                xml.sequenceOffset=45
 bswEntryKi   BswEntryKindE      0..1    attr   This describes whether the entry is concrete or
 nd           num                               abstract. If the attribute is missing the entry is
                                                considered as concrete.
Tags: xml.sequenceOffset=40
                                               Tags: xml.sequenceOffset=25
 executionC   BswExecutionC      1     attr    Specifies the execution context which is required
 ontext       ontext                           (in case of entries into this module) or guaranteed
                                               (in case of entries called from this module) for this
                                               service.
                                               Tags: xml.sequenceOffset=30
 functionPr   NameToken         0..1   attr    This attribute is used to control the generation of
 ototypeEmi                                    function prototypes. If set to "RTE", the RTE
 tter                                          generates the function prototypes in the Module
                                               Interlink Header File.
 isReentran   Boolean            1     attr    Reentrancy from the viewpoint of function callers:
 t
                                                    True: Enables the service to be invoked
                                                     again, before the service has finished.
                                                    False: It is prohibited to invoke the service
                                                     again before is has finished.
                                               Tags: xml.sequenceOffset=15
 isSynchron   Boolean            1     attr    Synchronicity from the viewpoint of function
 ous                                           callers:
                                                    True: This calls a synchronous service, i.e.
                                                     the service is completed when the call
                                                     returns.
                                                    False: The service (on semantical level)
                                                     may not be complete when the call returns.
                                               Tags: xml.sequenceOffset=20
 returnType   SwServiceArg      0..1   aggr    The return type belonging to this bswModuleEntry.
                                               Tags: xml.sequenceOffset=40
 role         Identifier        0..1   attr    Specifies the role of the entry in the given context.
                                               It shall be equal to the standardized name of the
                                               service call, especially in cases where no
                                               ServiceIdentifier is specified, e.g. for callbacks.
                                               Note that the ShortName is not always sufficient
                                               because it maybe vendor specific (e.g. for
                                               callbacks which can have more than one
                                               instance).
                                               Tags: xml.sequenceOffset=10
 serviceId    PositiveInteger   0..1   attr    Refers to the service identifier of the Standardized
                                               Interfaces of AUTOSAR basic software. For
                                               non-standardized interfaces, it can optionally be
                                               used for proprietary identification.
Tags: xml.sequenceOffset=5
Tags: xml.sequenceOffset=35
 Class        BswOperationInvokedEvent
 Package      M2::AUTOSARTemplates::BswModuleTemplate::BswBehavior
 Note         This event is thrown on operation invocation in Client-Server-Communication via the
              BSW Scheduler. Its "entry" reference provides the BswClientServerEntry that is
              called subsequently.
 Class        BswQueuedDataReceptionPolicy
 Package      M2::AUTOSARTemplates::BswModuleTemplate::BswBehavior
 Note         Reception policy attributes specific for queued receiving.
 Base         ARObject, BswApiOptions, BswDataReceptionPolicy
 Attribute    Type                Mul. Kind Note
 queueLeng    PositiveInteger       1      attr    Length of queue for received events.
 th
 Class        BswSchedulableEntity
 Package      M2::AUTOSARTemplates::BswModuleTemplate::BswBehavior
 Note         BSW module entity, which is designed for control by the BSW Scheduler. It may for
              example implement a so-called "main" function.
 Base         ARObject, BswModuleEntity, ExecutableEntity, Identifiable, MultilanguageReferrable,
              Referrable
 Attribute    Type              Mul. Kind Note
                                            
 Class         BswSchedulerNamePrefix
 Package       M2::AUTOSARTemplates::BswModuleTemplate::BswBehavior
 Note          A prefix to be used in names of generated code artifacts which make up the interface
               of a BSW module to the BswScheduler.
 Base          ARObject, ImplementationProps, Referrable
 Attribute     Type                Mul. Kind Note
                                              
 Class         BswSynchronousServerCallPoint
 Package       M2::AUTOSARTemplates::BswModuleTemplate::BswBehavior
 Note          Represents a synchronous procedure call point via the BSW Scheduler.
 Base          ARObject, BswModuleCallPoint, Referrable
 Attribute     Type              Mul. Kind Note
 calledEntry   BswModuleClie      1      ref   The entry to be called.
               ntServerEntry
 calledFrom    ExclusiveAreaN    0..1    ref   This indicates that the call point is located at the
 WithinExcl    estingOrder                     deepest level inside one or more ExclusiveAreas
 usiveArea                                     that are nested in the given order.
 Class         BswTimingEvent
 Package       M2::AUTOSARTemplates::BswModuleTemplate::BswBehavior
 Note          A recurring BswEvent driven by a time period.
 Base          ARObject, AbstractEvent, BswEvent, BswScheduleEvent, Identifiable, Multilanguage
               Referrable, Referrable
 Attribute     Type               Mul. Kind Note
 period        TimeValue            1     attr    Requirement for the time period (in seconds) by
                                                  which this event is triggered.
 Class         BswTriggerDirectImplementation
 Package       M2::AUTOSARTemplates::BswModuleTemplate::BswBehavior
 Note          Specifies a released trigger to be directly implemented via OS calls, for example in a
               Complex Driver module.
 Base          ARObject
 Attribute     Type               Mul. Kind Note
 masteredT     Trigger              1        ref   The trigger which is directly mastered by this
 rigger                                            module.
 Class         BufferProperties
 Package       M2::AUTOSARTemplates::SystemTemplate::Transformer
 Note          Configuration of the buffer properties the transformer needs to work.
 Base          ARObject
 Attribute     Type                Mul. Kind Note
 bufferCom     CompuScale          0..1     aggr If the transformer changes the size of the data, the
 putation                                           CompuScale can be used to specify a rule to
                                                    derive the size of the output data based on the
                                                    size of the input data.
 headerLen     Integer               1      attr    Defines the length of the header (in bits) this
 gth                                                transformer will add in front of the data.
 inPlace       Boolean               1      attr    If set, the transformer uses the input buffer as
                                                    output buffer.
 Enumeration      CSTransformerErrorReactionEnum
 Package          M2::AUTOSARTemplates::SystemTemplate::Transformer
 Note             Possible kinds of error reaction in case of a hard transformer error.
 Literal          Description
 application      The application is responsible for any error reaction. No autonomous error reaction
 Only             of RTE and transformer.
Tags: atp.EnumerationValue=0
autonomous RTE and Transformer coordinate an autonomous error reaction on their own.
Tags: atp.EnumerationValue=1
 Class          CalibrationParameterValue
 Package        M2::AUTOSARTemplates::SWComponentTemplate::MeasurementAndCalibration::
                CalibrationParameterValues
 Note           Specifies instance specific calibration parameter values used to initialize the memory
                objects implementing calibration parameters in the generated RTE code.
                RTE generator will use the implInitValue to override the initial values specified for the
                DataPrototypes of a component type.
                The applInitValue is used to exchange init values with the component vendor not
                publishing the transformation algorithm between ApplicationDataTypes and
                ImplementationDataTypes or defining a instance specific initialization of components
                which are only defined with ApplicationDataTypes.
                Note: If both representations of init values are available these need to represent the
                same content.
 Class          ClientIdDefinition
 Package        M2::AUTOSARTemplates::SystemTemplate
 Note           Several clients in one client-ECU can communicate via inter-ECU client-server
                communication with a server on a different ECU, if a client identifier is used to
                distinguish the different clients. The Client Identifier of the transaction handle that is
                used by the RTE can be defined by this element.
 Base           ARObject, Identifiable, MultilanguageReferrable, Referrable
 Attribute      Type                 Mul. Kind Note
 clientId       Numerical              1       attr   The Client Identifier of the transaction handle used
                                                      for a inter-ECU client server communication is
                                                      defined by this attribute. If defined the RTE
                                                      generator shall use this clientId.
 Class          ClientServerApplicationErrorMapping
 Package        M2::AUTOSARTemplates::SWComponentTemplate::PortInterface
 Note           This meta-class represents the ability to map ApplicationErrors onto each other.
 Base           ARObject
 Attribute      Type               Mul. Kind Note
 firstApplica   ApplicationError     1      ref    This represents the first ApplicationError in the
 tionError                                         context of the
                                                   ClientServerApplicationErrorMapping.
 secondApp      ApplicationError     1      ref    This represents the second ApplicationError in the
 licationErro                                      context of the
 r                                                 ClientServerApplicationErrorMapping.
 Class          ClientServerInterface
 Package        M2::AUTOSARTemplates::SWComponentTemplate::PortInterface
 Note           A client/server interface declares a number of operations that can be invoked on a
                server by a client.
                Tags: atp.recommendedPackage=PortInterfaces
 Base           ARElement, ARObject, AtpBlueprint, AtpBlueprintable, AtpClassifier, AtpType,
                CollectableElement, Identifiable, MultilanguageReferrable, PackageableElement, Port
                Interface, Referrable
 Attribute      Type                Mul. Kind Note
 operation      ClientServerOp       1..*   aggr ClientServerOperation(s) of this
                eration                            ClientServerInterface.
                                                    Stereotypes: atpVariation
                                                    Tags: vh.latestBindingTime=blueprintDerivation
                                                    Time
 possibleErr    ApplicationError       *    aggr    Application errors that are defined as part of this
 or                                                 interface.
 Class          ClientServerInterfaceMapping
 Package        M2::AUTOSARTemplates::SWComponentTemplate::PortInterface
 Note           Defines the mapping of ClientServerOperations in context of two different
                ClientServerInterfaces.
 Base           ARObject, AtpBlueprint, AtpBlueprintable, Identifiable, MultilanguageReferrable, Port
                InterfaceMapping, Referrable
 Attribute      Type                Mul. Kind Note
 Class         ClientServerOperation
 Package       M2::AUTOSARTemplates::SWComponentTemplate::PortInterface
 Note          An operation declared within the scope of a client/server interface.
 Base          ARObject, AtpClassifier, AtpFeature, AtpStructureElement, Identifiable,
               MultilanguageReferrable, Referrable
 Attribute     Type               Mul. Kind Note
 argument      ArgumentDataP        *     aggr An argument of this ClientServerOperation
 (ordered)     rototype
                                                  Stereotypes: atpVariation
                                                  Tags: vh.latestBindingTime=blueprintDerivation
                                                  Time
 possibleErr   ApplicationError     *      ref    Possible errors that may by raised by the referring
 or                                               operation.
 Class         ClientServerToSignalMapping
 Package       M2::AUTOSARTemplates::SystemTemplate::DataMapping
 Note          This element maps the ClientServerOperation to call- and return-SystemSignals.
 Base          ARObject, DataMapping
 Attribute     Type              Mul. Kind Note
 callSignal    SystemSignal        1       ref  Reference to the callSignal to which the IN and
                                                INOUT ArgumentDataPrototypes are mapped.
 clientServe   ClientServerOp      1      iref  Reference to a ClientServerOperation, which is
 rOperation    eration                          mapped to a call SystemSignal and a return
                                                SystemSignal.
 returnSign    SystemSignal      0..1      ref  Reference to the returnSignal to which the OUT
 al                                             and INOUT ArgumentDataPrototypes are
                                                mapped.
Tags: atp.Status=shallBecomeMandatory
 Class        ComplexDeviceDriverSwComponentType
 Package      M2::AUTOSARTemplates::SWComponentTemplate::Components
 Note         The ComplexDeviceDriverSwComponentType is a special AtomicSwComponentType
              that has direct access to hardware on an ECU and which is therefore linked to a
              specific ECU or specific hardware. The ComplexDeviceDriverSwComponentType
              introduces the possibility to link from the software representation to its hardware
              description provided by the ECU Resource Template.
              Tags: atp.recommendedPackage=SwComponentTypes
 Base         ARElement, ARObject, AtomicSwComponentType, AtpBlueprint, AtpBlueprintable,
              AtpClassifier, AtpType, CollectableElement, Identifiable, MultilanguageReferrable,
              PackageableElement, Referrable, SwComponentType
 Attribute    Type                Mul. Kind Note
 hardwareE    HwDescriptionE       *       ref   Reference from the
 lement       ntity                              ComplexDeviceDriverSwComponentType to the
                                                 description of the used HwElements.
 Class        CompositionSwComponentType
 Package      M2::AUTOSARTemplates::SWComponentTemplate::Composition
 Note         A CompositionSwComponentType aggregates SwComponentPrototypes (that in turn
              are typed by SwComponentTypes) as well as SwConnectors for primarily connecting
              SwComponentPrototypes among each others and towards the surface of the
              CompositionSwComponentType. By this means hierarchical structures of
              software-components can be created.
              Tags: atp.recommendedPackage=SwComponentTypes
 Base         ARElement, ARObject, AtpBlueprint, AtpBlueprintable, AtpClassifier, AtpType,
              CollectableElement, Identifiable, MultilanguageReferrable, PackageableElement,
              Referrable, SwComponentType
 Attribute    Type              Mul. Kind Note
                                              Stereotypes: atpSplitable
                                              Tags: atp.Splitkey=constantValueMapping
                                                   Stereotypes: atpSplitable
                                                   Tags: atp.Splitkey=dataTypeMapping
 instantiatio   InstantiationRT      *     aggr    This allows to define instantiation specific
 nRTEEven       EEventProps                        properties for RTE Events, in particular for
 tProps                                            instance specific scheduling.
 Class          CompuConst
 Package        M2::MSR::AsamHdo::ComputationMethod
 Note           This meta-class represents the fact that the value of a computation method scale is
                constant.
 Base           ARObject
 Attribute      Type               Mul. Kind Note
 compuCon       CompuConstCo         1     aggr This is the actual content of the constant compu
 stContentT     ntent                              method scale.
 ype
                                                   Tags: xml.roleElement=false; xml.roleWrapper
                                                   Element=false; xml.sequenceOffset=10; xml.type
                                                   Element=false; xml.typeWrapperElement=false
 Class         CompuMethod
 Package       M2::MSR::AsamHdo::ComputationMethod
 Note          This meta-class represents the ability to express the relationship between a physical
               value and the mathematical representation.
               Note that this is still independent of the technical implementation in data types. It only
               specifies the formula how the internal value corresponds to its physical pendant.
               Tags: atp.recommendedPackage=CompuMethods
 Base          ARElement, ARObject, AtpBlueprint, AtpBlueprintable, CollectableElement,
               Identifiable, MultilanguageReferrable, PackageableElement, Referrable
 Attribute     Type                  Mul. Kind Note
 compuInter    Compu                 0..1  aggr This specifies the computation from internal
 nalToPhys                                        values to physical values.
                                                    Tags: xml.sequenceOffset=80
 compuPhy      Compu                0..1    aggr    This represents the computation from physical
 sToInternal                                        values to the internal values.
                                                    Tags: xml.sequenceOffset=90
 displayFor    DisplayFormatS       0..1    attr    This property specifies, how the physical value
 mat           tring                                shall be displayed e.g. in documents or
                                                    measurement and calibration tools.
                                                    Tags: xml.sequenceOffset=20
 unit          Unit                 0..1     ref    This is the physical unit of the Physical values for
                                                    which the CompuMethod applies.
Tags: xml.sequenceOffset=30
 Class         CompuNominatorDenominator
 Package       M2::MSR::AsamHdo::ComputationMethod
 Note          This class represents the ability to express a polynomial either as Nominator or as
               Denominator.
 Base          ARObject
 Attribute     Type               Mul. Kind Note
 v (ordered)   Numerical            *      attr     this is the list of polynomial factors. Note that the
                                                    first vf represents the power=0. The polynomial is
                                                    v[0] * x 0 + v[1] * x 1 ...
                                                    Stereotypes: atpVariation
                                                    Tags: vh.latestBindingTime=preCompileTime
                                                    xml.roleElement=true; xml.roleWrapper
                                                    Element=false; xml.sequenceOffset=20; xml.type
                                                    Element=false; xml.typeWrapperElement=false
 Class        CompuRationalCoeffs
 Package      M2::MSR::AsamHdo::ComputationMethod
 Note         This meta-class represents the ability to express a rational function by specifying the
              coefficients of nominator and denominator.
 Base         ARObject
 Attribute    Type                Mul. Kind Note
 compuDen     CompuNominat         1      aggr This is the denominator of the expression.
 ominator     orDenominator
                                                 Tags: xml.sequenceOffset=30
 compuNu      CompuNominat         1      aggr This is the numerator of the rational expression.
 merator      orDenominator
                                                 Tags: xml.sequenceOffset=20
 Class        CompuScale
 Package      M2::MSR::AsamHdo::ComputationMethod
 Note         This meta-class represents the ability to specify one segment of a segmented
              computation method.
 Base         ARObject
 Attribute    Type               Mul. Kind Note
 desc         MultiLanguage      0..1    aggr <desc> represents a general but brief description
              OverviewParagr                     of the object in question.
              aph
                                                 Tags: xml.sequenceOffset=30
 compuInve    CompuConst         0..1    aggr This is the inverse value of the constraint. This
 rseValue                                        supports the case that the scale is not reversible
                                                 per se.
                                                  Tags: xml.sequenceOffset=60
 compuScal    CompuScaleCo        0..1    aggr    This represents the computation details of the
 eContents    ntents                              scale.
                                                  Stereotypes: atpVariation
                                                  Tags: vh.latestBindingTime=preCompileTime
                                                  xml.sequenceOffset=40
                                                   Tags: xml.sequenceOffset=35
 shortLabel   Identifier           0..1    attr    This element specifies a short name for the
                                                   particular scale. The name can for example be
                                                   used to derive a programming language identifier.
                                                   Tags: xml.sequenceOffset=20
 symbol       CIdentifier          0..1    attr    The symbol, if provided, is used by code
                                                   generators to get a C identifier for the
                                                   CompuScale. The name will be used as is for the
                                                   code generation, therefore it needs to be unique
                                                   within the generation context.
                                                   Tags: xml.sequenceOffset=25
 upperLimit   Limit                0..1    attr    This specifies the upper limit of a of the scale.
                                                   Stereotypes: atpVariation
                                                   Tags: vh.latestBindingTime=preCompileTime
                                                   xml.sequenceOffset=50
 Class        CompuScaleConstantContents
 Package      M2::MSR::AsamHdo::ComputationMethod
 Note         This meta-class represents the fact that a particular scale of the computation method
              is constant.
 Base         ARObject, CompuScaleContents
 Attribute    Type               Mul. Kind Note
 compuCon     CompuConst           1     aggr This represents the fact that the scale is a
 st                                              constant. The use case is mainly a non
                                                 interplolated scale. It is a simplification of the fact
                                                 that a constant scale can also be expressed as
                                                 Rational Function of oder 0.
Tags: xml.sequenceOffset=90
 Class         CompuScales
 Package       M2::MSR::AsamHdo::ComputationMethod
 Note          This meta-class represents the ability to stepwise express a computation method.
 Base          ARObject, CompuContent
 Attribute     Type               Mul. Kind Note
 compuScal     CompuScale           *     aggr This represents one scale within the compu
 e (ordered)                                      method. Note that it contains a Variationpoint in
                                                  order to support blueprints of enumerations.
                                                   Stereotypes: atpVariation
                                                   Tags: vh.latestBindingTime=blueprintDerivation
                                                   Time
                                                   xml.roleElement=true; xml.roleWrapper
                                                   Element=true; xml.sequenceOffset=40; xml.type
                                                   Element=false; xml.typeWrapperElement=false
Tags: xml.attribute=true
 Class         ConsistencyNeeds
 Package       M2::AUTOSARTemplates::SWComponentTemplate::ImplicitCommunicationBehavior
 Note          This meta-class represents the ability to define requirements on the implicit
               communication behavior.
 Base          ARObject, AtpBlueprint, AtpBlueprintable, Identifiable, MultilanguageReferrable,
               Referrable
 Attribute     Type               Mul. Kind Note
 Class          ConstantSpecificationMapping
 Package        M2::AUTOSARTemplates::CommonStructure::Constants
 Note           This meta-class is used to create an association of two ConstantSpecifications. One
                ConstantSpecification is supposed to be defined in the application domain while the
                other should be defined in the implementation domain.
 Class          DataConstr
 Package        M2::MSR::AsamHdo::Constraints::GlobalConstraints
 Note           This meta-class represents the ability to specify constraints on data.
                Tags: atp.recommendedPackage=DataConstrs
 Base           ARElement, ARObject, AtpBlueprint, AtpBlueprintable, CollectableElement,
                Identifiable, MultilanguageReferrable, PackageableElement, Referrable
 Attribute      Type                  Mul. Kind Note
 dataConstr     DataConstrRule         *    aggr This is one particular rule within the data
 Rule                                              constraints.
 Class         DataPrototypeGroup
 Package       M2::AUTOSARTemplates::SWComponentTemplate::ImplicitCommunicationBehavior
 Note          This meta-class represents the ability to define a collection of DataPrototypes that are
               subject to the formal definition of implicit communication behavior. The definition of
               the collection can be nested.
 Base          ARObject, AtpClassifier, AtpFeature, AtpStructureElement, Identifiable,
               MultilanguageReferrable, Referrable
 Attribute     Type                Mul. Kind Note
 dataProtot    DataPrototypeG        *        iref   This represents the ability to define nested groups
 ypeGroup      roup                                  of VariableDataPrototypes.
                                                   Stereotypes: atpVariation
                                                   Tags: vh.latestBindingTime=preCompileTime
 implicitDat   VariableDataPr        *      iref   This represents a collection of
 aAccess       ototype                             VariableDataPrototypes that belong to the
                                                   enclosing DataPrototypeGroup
                                                   Stereotypes: atpVariation
                                                   Tags: vh.latestBindingTime=preCompileTime
 Class         DataPrototypeMapping
 Package       M2::AUTOSARTemplates::SWComponentTemplate::PortInterface
 Note          Defines the mapping of two particular VariableDataPrototypes,
               ParameterDataPrototypes or ArgumentDataPrototypes with unequal names and/or
               unequal semantic (resolution or range) in context of two different
               SenderReceiverInterface, NvDataInterface or ParameterInterface or Operations.
               In the case that the DataPrototypes are typed by AutosarDataType either referring to
               CompuMethods of category LINEAR, IDENTICAL or referring to no CompuMethod
               (which is similar as IDENTICAL) the linear conversion factor is calculated out of the
               factorSiToUnit and offsetSiToUnit attributes of the referred Units and the
               CompuRationalCoeffs of a compuInternalToPhys of the referred CompuMethods.
 Base          ARObject
 Attribute     Type                 Mul. Kind Note
 firstDataPr   AutosarDataPro         1     ref   First to be mapped DataPrototype in context of a
 ototype       totype                             SenderReceiverInterface, NvDataInterface,
                                                  ParameterInterface or Operation.
 firstToSec    DataTransforma        0..1   ref   This defines the need to execute the
 ondDataTr     tion                               DataTransformation <Mip>_<transformerId>
 ansformati                                       functions of the transformation chain when
 on                                               communicating from the
                                                  DataPrototypeMapping.firstDataPrototype to the
                                                  DataPrototypeMapping.secondDataPrototype.
                                                  And to execute the DataTransformation
                                                  <Mip>_Inv_<transformerId> functions of the
                                                  transformation chain when communicating from
                                                  the DataPrototypeMapping.secondDataPrototype
                                                  to the DataPrototypeMapping.firstDataPrototype.
 secondDat     AutosarDataPro         1     ref   Second to be mapped DataPrototype in context of
 aPrototype    totype                             a SenderReceiverInterface, NvDataInterface,
                                                  ParameterInterface or Operation.
 subElemen     SubElementMa           *    aggr This represents the owned SubelementMapping.
 tMapping      pping
 textTableM    TextTableMappi        0..2  aggr Applied TextTableMapping(s)
 apping        ng
 Class         DataPrototypeTransformationProps
 Package       M2::AUTOSARTemplates::SystemTemplate::Transformer
 Note          DataPrototypeTransformationProps allows to set the attributes for the different
               TransformationTechnologies that are DataPrototype specific.
 Base          ARObject
 Attribute     Type              Mul. Kind Note
 dataProtot    DataPrototypeIn   0..1    aggr Reference to a DataPrototype that is transported
 ypeRef        SystemRef                         in the serialized ISignal.
 Class         DataReceiveErrorEvent
 Package       M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior::RTE
               Events
 Note          This event is raised by the RTE when the Com layer detects and notifies an error
               concerning the reception of the referenced data element.
 Base          ARObject, AbstractEvent, AtpClassifier, AtpFeature, AtpStructureElement,
               Identifiable, MultilanguageReferrable, RTEEvent, Referrable
 Attribute     Type                  Mul. Kind Note
 data          VariableDataPr        0..1   iref   Data element referenced by event
               ototype
 Class         DataReceivedEvent
 Package       M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior::RTE
               Events
 Note          The event is raised when the referenced data elements are received.
 Base          ARObject, AbstractEvent, AtpClassifier, AtpFeature, AtpStructureElement,
               Identifiable, MultilanguageReferrable, RTEEvent, Referrable
 Attribute     Type                  Mul. Kind Note
 data          VariableDataPr        0..1  iref   Data element referenced by event
               ototype
 Class         DataSendCompletedEvent
 Package       M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior::RTE
               Events
 Note          The event is raised when the referenced data elements have been sent or an error
               occurs.
 Base          ARObject, AbstractEvent, AtpClassifier, AtpFeature, AtpStructureElement,
               Identifiable, MultilanguageReferrable, RTEEvent, Referrable
 Attribute     Type                  Mul. Kind Note
 eventSour     VariableAccess         1    ref    The variable access that triggers the event.
 ce
 Class          DataTransformation
 Package        M2::AUTOSARTemplates::SystemTemplate::Transformer
 Note           A DataTransformation represents a transformer chain. It is an ordered list of
                transformers.
 Base           ARObject, Identifiable, MultilanguageReferrable, Referrable
 Attribute      Type                Mul. Kind Note
 dataTransf     DataTransforma      0..1      attr This attribute controls the kind of
 ormationKi     tionKindEnum                       DataTransformation to be applied.
 nd
 executeDe      Boolean              1      attr   Specifies whether the transformer chain is
 spiteDataU                                        executed even if no input data are available.
 navailabilit
 y
 transform      Transformation      1..*    ref    This attribute represents the definition of a chain
 erChain        Technology                         of transformers that are supposed to be executed
 (ordered)                                         according to the order of being referenced from
                                                   DataTransformation.
 Enumeration      DataTransformationErrorHandlingEnum
 Package          M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior::PortAPI
                  Options
 Note             This enumeration defines different ways how runnables shall handle transformer
                  errors.
 Literal          Description
 noTrans-         A runnable does not handle transformer errors.
 formerError
 Handling         Tags: atp.EnumerationValue=0
 transformer      The runnable implements the handling of transformer errors.
 ErrorHan-
 dling            Tags: atp.EnumerationValue=1
 Class          DataTypeMap
 Package        M2::AUTOSARTemplates::SWComponentTemplate::Datatype::Datatypes
 Note           This class represents the relationship between ApplicationDataType and its
                implementing ImplementationDataType.
 Base           ARObject
 Attribute      Type               Mul. Kind Note
 application    ApplicationData      1       ref    This is the corresponding ApplicationDataType
 DataType       Type
 implement      Implementation       1       ref    This is the corresponding
 ationDataT     DataType                            ImplementationDataType.
 ype
 Class           DataTypeMappingSet
 Package         M2::AUTOSARTemplates::SWComponentTemplate::Datatype::Datatypes
 Note            This class represents a list of mappings between ApplicationDataTypes and
                 ImplementationDataTypes. In addition, it can contain mappings between
                 ImplementationDataTypes and ModeDeclarationGroups.
                 Tags: atp.recommendedPackage=DataTypeMappingSets
 Base            ARElement, ARObject, AtpBlueprint, AtpBlueprintable, CollectableElement,
                 Identifiable, MultilanguageReferrable, PackageableElement, Referrable
 Attribute       Type                  Mul. Kind Note
 dataTypeM       DataTypeMap            *    aggr This is one particular association between an
 ap                                                 ApplicationDataType and its
                                                    ImplementationDataType.
 modeRequ        ModeRequestT           *    aggr This is one particular association between an
 estTypeMa       ypeMap                             ModeDeclarationGroup and its
 p                                                  ImplementationDataType.
 Enumeration       DataTypePolicyEnum
 Package           M2::AUTOSARTemplates::SystemTemplate::DataMapping
 Note              This class lists the supported DataTypePolicies.
 Literal           Description
 legacy            In case the System Description doesnt use a complete Software Component
                   Description (VFB View) this value can be chosen. This supports the inclusion of
                   legacy signals.
                   Tags: atp.EnumerationValue=0
 networkRep-       Ignore any networkRepresentationProps of this ISignal and use the
 resentation       networkRepresentation from the ComSpec.
 FromCom
 Spec              Please note that the usage does not imply the existence of the SwDataDefProps in
                   the role networkRepresentation aggregated by the SenderComSpec or
                   ReceiverComSpec if an ImplementationDataType is defined.
                   Tags: atp.EnumerationValue=1
 override          If this value is chosen the requirements specified in the ComSpec
                   (networkRepresentationFromComSpec) are not fullfilled by the aggregated
                   SwDataDefProps. In this case the networkRepresentation is specified by the
                   aggregated swDataDefProps.
                   Tags: atp.EnumerationValue=2
 transformingI     This literal indicates that a transformer chain shall be used to communicate the
 Signal            ISignal as UINT8_N over the bus.
Tags: atp.EnumerationValue=4
 Class         DataWriteCompletedEvent
 Package       M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior::RTE
               Events
 Note          This event is raised if an implicit write access was successful or an error occurred.
 Base          ARObject, AbstractEvent, AtpClassifier, AtpFeature, AtpStructureElement,
               Identifiable, MultilanguageReferrable, RTEEvent, Referrable
 Attribute     Type                  Mul. Kind Note
 eventSour     VariableAccess         1      ref      The variable access that triggers the event.
 ce
 Class         DelegationSwConnector
 Package       M2::AUTOSARTemplates::SWComponentTemplate::Composition
 Note          A delegation connector delegates one inner PortPrototype (a port of a component
               that is used inside the composition) to a outer PortPrototype of compatible type that
               belongs directly to the composition (a port that is owned by the composition).
 Base          ARObject, AtpClassifier, AtpFeature, AtpStructureElement, Identifiable,
               MultilanguageReferrable, Referrable, SwConnector
 Attribute     Type                 Mul. Kind Note
 innerPort     PortPrototype         1     iref    The port that belongs to the ComponentPrototype
                                                   in the composition
                                                   Tags: xml.typeElement=true
 outerPort     PortPrototype         1      ref    The port that is located on the outside of the
                                                   CompositionType
 Class         DependencyOnArtifact
 Package       M2::AUTOSARTemplates::CommonStructure::Implementation
 Note          Dependency on the existence of another artifact, e.g. a library.
 Base          ARObject, Identifiable, MultilanguageReferrable, Referrable
 Attribute     Type                Mul. Kind Note
 artifactDes   AutosarEnginee        1     aggr The specified artifact needs to exist.
 criptor       ringObject
 usage         DependencyUs        1..*      attr Specification for which process step(s) this
               ageEnum                            dependency is required.
 Class         EcuAbstractionSwComponentType
 Package       M2::AUTOSARTemplates::SWComponentTemplate::Components
 Note          The ECUAbstraction is a special AtomicSwComponentType that resides between a
               software-component that wants to access ECU periphery and the Microcontroller
               Abstraction. The EcuAbstractionSwComponentType introduces the possibility to link
               from the software representation to its hardware description provided by the ECU
               Resource Template.
               Tags: atp.recommendedPackage=SwComponentTypes
 Base          ARElement, ARObject, AtomicSwComponentType, AtpBlueprint, AtpBlueprintable,
               AtpClassifier, AtpType, CollectableElement, Identifiable, MultilanguageReferrable,
               PackageableElement, Referrable, SwComponentType
 Attribute     Type                Mul. Kind Note
 hardwareE     HwDescriptionE       *       ref   Reference from the
 lement        ntity                              EcuAbstractionComponentType to the description
                                                  of the used HwElements.
 Enumeration     EcucConfigurationClassEnum
 Package         M2::AUTOSARTemplates::ECUCParameterDefTemplate
 Note            Possible configuration classes for the AUTOSAR configuration parameters.
 Literal         Description
 Link            Link Time: parts of configuration are delivered from another object code file
                 Tags: atp.EnumerationValue=0
 PostBuild       PostBuildTime: after compilation a configuration parameter can be changed.
                 Tags: atp.EnumerationValue=1
 PreCompile      PreCompile Time: after compilation a configuration parameter can not be changed
                 any more.
                 Tags: atp.EnumerationValue=2
 Published       PublishedInformation is used to specify the fact that certain information is fixed
 Information     even before the pre-compile stage.
Tags: atp.EnumerationValue=3
 Class         EcucForeignReferenceDef
 Package       M2::AUTOSARTemplates::ECUCParameterDefTemplate
 Note          Specify a reference to an XML description of an entity described in another
               AUTOSAR template.
 Base          ARObject, AtpDefinition, EcucAbstractExternalReferenceDef, EcucAbstract
               ReferenceDef, EcucCommonAttributes, EcucDefinitionElement, Identifiable,
               MultilanguageReferrable, Referrable
 Attribute     Type               Mul. Kind Note
 destination   String               1     attr   The type in the AUTOSAR Metamodel to which
 Type                                            instance this reference is allowed to point to.
 Class        EcucModuleConfigurationValues
 Package      M2::AUTOSARTemplates::ECUCDescriptionTemplate
 Note         Head of the configuration of one Module. A Module can be a BSW module as well as
              the RTE and ECU Infrastructure.
              The preconfiguredConfiguration contains values for those parameters which are fixed
              by the implementation and cannot be changed.
              Tags: atp.recommendedPackage=EcucModuleConfigurationValuess
 Base         ARElement, ARObject, CollectableElement, Identifiable, MultilanguageReferrable,
              PackageableElement, Referrable
 Attribute    Type             Mul. Kind Note
 container    EcucContainerV   1..*    aggr Aggregates all containers that belong to this
              alue                            module configuration.
atpVariation: [RS_ECUC_00078]
                                                Tags: xml.sequenceOffset=-10
 ecucDefEd    RevisionLabelSt     1      attr   This is the version info of the ModuleDef ECUC
 ition        ring                              Parameter definition to which this values conform
                                                to / are based on.
 Class        EcucModuleDef
 Package      M2::AUTOSARTemplates::ECUCParameterDefTemplate
 Note         Used as the top-level element for configuration definition for Software Modules,
              including BSW and RTE as well as ECU Infrastructure.
              Tags: atp.recommendedPackage=EcucModuleDefs
 Base         ARElement, ARObject, AtpBlueprint, AtpBlueprintable, AtpDefinition, Collectable
              Element, EcucDefinitionElement, Identifiable, MultilanguageReferrable, Packageable
              Element, Referrable
 Attribute    Type               Mul. Kind Note
 apiService   CIdentifier        0..1   attr    For CDD modules this attribute holds the
 Prefix                                         apiServicePrefix.
                                                 Stereotypes: atpSplitable
                                                 Tags: atp.Splitkey=shortName
                                                 xml.sequenceOffset=11
 postBuildV   Boolean             0..1    attr   Indicates if a module supports different post-build
 ariantSupp                                      variants (previously known as post-build
 ort                                             selectable configuration sets). TRUE means yes,
                                                 FALSE means no.
                                                Stereotypes: atpUriDef
 supported    EcucConfigurati      *     attr   Specifies which ConfigurationVariants are
 ConfigVari   onVariantEnum                     supported by this software module. This attribute
 ant                                            is optional if the EcucModuleDef has the category
                                                STANDARDIZED_MODULE_DEFINITION. If the
                                                category attribute of the EcucModuleDef is set to
                                                VENDOR_SPECIFIC_MODULE_DEFINITION
                                                then this attribute is mandatory.
 Class        EcucParamConfContainerDef
 Package      M2::AUTOSARTemplates::ECUCParameterDefTemplate
 Note         Used to define configuration containers that can hierarchically contain other
              containers and/or parameter definitions.
 Base         ARObject, AtpDefinition, EcucContainerDef, EcucDefinitionElement, Identifiable,
              MultilanguageReferrable, Referrable
 Attribute    Type               Mul. Kind Note
 parameter    EcucParameter        *      aggr The parameters defined within the
              Def                                EcucParamConfContainerDef.
                                                Stereotypes: atpSplitable
                                                Tags: atp.Splitkey=shortName
 reference    EcucAbstractRe       *     aggr   The references defined within the
              ferenceDef                        EcucParamConfContainerDef.
                                                Stereotypes: atpSplitable
                                                Tags: atp.Splitkey=shortName
 subContai    EcucContainerD       *     aggr   The containers defined within the
 ner          ef                                EcucParamConfContainerDef.
                                                Stereotypes: atpSplitable
                                                Tags: atp.Splitkey=shortName
                                                 Tags: xml.sequenceOffset=20
 domain       NameToken           0..1    attr   This denotes the domain in which the engineering
                                                 object is stored. This allows to indicate various
                                                 segments in the repository keeping the
                                                 engineering objects. The domain may segregate
                                                 companies, as well as automotive domains.
                                                 Details need to be defined by the Methodology.
                                                 Tags: xml.sequenceOffset=40
 revisionLa   RevisionLabelSt      *      attr   This is a revision label denoting a particular
 bel          ring                               version of the engineering object.
                                                 Tags: xml.sequenceOffset=30
 shortLabel   NameToken            1      attr   This is the short name of the engineering object.
                                                 Note that it is modeled as NameToken and not as
                                                 Identifier since in ASAM-CC it is also a
                                                 NameToken.
Tags: xml.sequenceOffset=10
 Class        ExclusiveArea
 Package      M2::AUTOSARTemplates::CommonStructure::InternalBehavior
 Note         Prevents an executable entity running in the area from being preempted.
 Base         ARObject, Identifiable, MultilanguageReferrable, Referrable
 Attribute    Type                Mul. Kind Note
                                             
 Class         ExecutableEntityActivationReason
 Package       M2::AUTOSARTemplates::CommonStructure::InternalBehavior
 Note          This meta-class represents the ability to define the reason for the activation of the
               enclosing ExecutableEntity.
 Base          ARObject, ImplementationProps, Referrable
 Attribute     Type               Mul. Kind Note
 bitPosition   PositiveInteger      1      attr   This attribute allows for defining the position of the
                                                  enclosing ExecutableEntityActivationReason in
                                                  the activation vector.
 Class         ExternalTriggerOccurredEvent
 Package       M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior::RTE
               Events
 Note          The event is raised when the referenced trigger have been occurred.
 Base          ARObject, AbstractEvent, AtpClassifier, AtpFeature, AtpStructureElement,
               Identifiable, MultilanguageReferrable, RTEEvent, Referrable
 Attribute     Type                  Mul. Kind Note
 trigger       Trigger               0..1  iref   Reference to the applicable Trigger.
 Class         ExternalTriggeringPoint
 Package       M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior::Trigger
 Note          If a RunnableEntity owns an ExternalTriggeringPoint it is entitled to raise an
               ExternalTriggerOccurredEvent.
 Base          ARObject
 Attribute     Type                Mul. Kind Note
 ident         ExternalTriggeri    0..1   aggr The aggregation in the role ident provides the
               ngPointIdent                      ability to make the ExternalTriggeringPoint
                                                 identifiable.
                                                   Tags: atp.Status=shallBecomeMandatory
                                                   xml.sequenceOffset=-100
 trigger       Trigger             0..1     iref   The trigger taken for the ExternalTriggeringPoint.
 Class        FlatInstanceDescriptor
 Package      M2::AUTOSARTemplates::CommonStructure::FlatMap
 Note         Represents exactly one node (e.g. a component instance or data element) of the
              instance tree of a software system. The purpose of this element is to map the various
              nested representations of this instance to a flat representation and assign a unique
              name (shortName) to it.
              Use cases:
                   Specify unique names of measurable data to be used by MCD tools
                   Specify unique names of calibration data to be used by MCD tool
                   Specify a unique name for an instance of a component prototype in the ECU
                    extract of the system description
                                                    Tags: xml.sequenceOffset=40
 role         Identifier           0..1     attr    The role denotes the particular role of the
                                                    downstream memory location described by this
                                                    FlatInstanceDescriptor.
Tags: xml.sequenceOffset=20
 Class        FlatMap
 Package      M2::AUTOSARTemplates::CommonStructure::FlatMap
 Note         Contains a flat list of references to software objects. This list is used to identify
              instances and to resolve name conflicts. The scope is given by the
              RootSwCompositionPrototype for which it is used, i.e. it can be applied to a system,
              system extract or ECU-extract.
              An instance of FlatMap may also be used in a preliminary context, e.g. in the scope of
              a software component before integration into a system. In this case it is not referred
              by a RootSwCompositionPrototype.
              Tags: atp.recommendedPackage=FlatMaps
 Base         ARElement, ARObject, AtpBlueprint, AtpBlueprintable, CollectableElement,
              Identifiable, MultilanguageReferrable, PackageableElement, Referrable
 Attribute    Type                  Mul. Kind Note
 Enumeration     HandleInvalidEnum
 Package         M2::AUTOSARTemplates::SWComponentTemplate::Communication
 Note            Strategies of handling the reception of invalidValue.
 Literal         Description
 dontInvali-     Invalidation is switched off.
 date
                 Tags: atp.EnumerationValue=0
 external        Replace a received invalidValue. The replacement value is sourced from the
 Replacement     externalReplacement.
                 Tags: atp.EnumerationValue=1
 keep            The application software is supposed to handle signal invalidation on RTE API level
                 either by DataReceiveErrorEvent or check of error code on read access.
                 Tags: atp.EnumerationValue=2
 replace         Replace a received invalidValue. The replacement value is specified by the
                 initValue.
Tags: atp.EnumerationValue=3
 Enumeration     HandleOutOfRangeEnum
 Package         M2::AUTOSARTemplates::SWComponentTemplate::Communication
 Note            A value of this type is taken for controlling the range checking behavior of the
                 AUTOSAR RTE.
 Literal         Description
 default         The RTE will use the initValue if the actual value is out of the specified bounds.
Tags: atp.EnumerationValue=0
 external       This indicates that the value replacement is sourced from the attribute replaceWith.
 Replacement
                Tags: atp.EnumerationValue=1
 ignore         The RTE will ignore any attempt to send or receive the corresponding dataElement
                if the value is out of the specified range.
                Tags: atp.EnumerationValue=2
 invalid        The RTE will use the invalidValue if the value is out of the specified bounds.
                Tags: atp.EnumerationValue=3
 none           A range check is not required.
                Tags: atp.EnumerationValue=4
 saturate       The RTE will saturate the value of the dataElement such that it is limited to the
                applicable upper bound if it is greater than the upper bound. Consequently, it is
                limited to the applicable lower bound if the value is less than the lower bound.
Tags: atp.EnumerationValue=5
 Enumeration    HandleOutOfRangeStatusEnum
 Package        M2::AUTOSARTemplates::SWComponentTemplate::Communication
 Note           This enumeration defines how the RTE handles values that are out of range.
 Literal        Description
 indicate       The RTE sets the return status to RTE_E_OUT_OF_RANGE if the received value
                is out of range and the attribute handleOutOfRange is not set to "none" or "invalid".
                Tags: atp.EnumerationValue=0
 silent         The RTE sets the return status to RTE_E_OK
Tags: atp.EnumerationValue=1
 Enumeration    HandleTimeoutEnum
 Package        M2::AUTOSARTemplates::SWComponentTemplate::Communication
 Note           Strategies of handling a reception timeout violation.
 Literal        Description
 none           If set to none no replacement shall take place.
                Tags: atp.EnumerationValue=0
 replace        If set to replace, the replacement value shall be the ComInitValue.
                Tags: atp.EnumerationValue=1
 replaceBy      If set to replace, the replacement value shall be the timeout substitution value.
 Timeout
 Substitution   Tags: atp.EnumerationValue=2
 Value
 Class        HwElement
 Package      M2::AUTOSARTemplates::EcuResourceTemplate
 Note         This represents the ability to describe Hardware Elements on an instance level. The
              particular types of hardware are distinguished by the category. This category
              determines the applicable attributes. The possible categories and attributes are
              defined in HwCategory.
              Tags: atp.recommendedPackage=HwElements
 Base         ARElement, ARObject, CollectableElement, HwDescriptionEntity, Identifiable,
              MultilanguageReferrable, PackageableElement, Referrable
 Attribute    Type              Mul. Kind Note
 hwElement    HwElementCon        *     aggr This represents one particular connection
 Connectio    nector                           between two hardware elements.
 n
                                                Stereotypes: atpVariation
                                                Tags: vh.latestBindingTime=systemDesignTime
                                                xml.sequenceOffset=110
 hwPinGrou    HwPinGroup           *     aggr   This aggregation is used to describe the
 p                                              connection facilities of a hardware element. Note
                                                that hardware element has no pins but only
                                                pingroups.
                                                Stereotypes: atpVariation
                                                Tags: vh.latestBindingTime=systemDesignTime
                                                xml.sequenceOffset=90
 nestedEle    HwElement            *      ref   This association is used to establish hierarchies of
 ment                                           hw elements. Note that one particular HwElement
                                                can be target of this association only once. I.e.
                                                multiple instantiation of the same HwElement is
                                                not supported (at any hierarchy level).
                                                Stereotypes: atpVariation
                                                Tags: vh.latestBindingTime=systemDesignTime
                                                xml.sequenceOffset=70
 Class        ISignal
 Package      M2::AUTOSARTemplates::SystemTemplate::Fibex::FibexCore::CoreCommunication
 Note         Signal of the Interaction Layer. The RTE supports a "signal fan-out" where the same
              System Signal is sent in different SignalIPdus to multiple receivers.
              To support the RTE "signal fan-out" each SignalIPdu contains ISignals. If the same
              System Signal is to be mapped into several SignalIPdus there is one ISignal needed
              for each ISignalToIPduMapping.
              ISignals describe the Interface between the Precompile configured RTE and the
              potentially Postbuild configured Com Stack (see ECUC Parameter Mapping).
              Tags: atp.recommendedPackage=ISignals
 Base         ARObject, CollectableElement, FibexElement, Identifiable, MultilanguageReferrable,
              PackageableElement, Referrable
 Attribute    Type              Mul. Kind Note
 dataTransf   DataTransforma     0..1   ref    Optional reference to a DataTransformation which
 ormation     tion                             represents the transformer chain that is used to
                                               transform the data that shall be placed inside this
                                               ISignal.
                                                If the policy
                                                "networkRepresentationFromComSpec" is chosen
                                                the network representation from the ComSpec
                                                that is aggregated by the PortPrototype shall be
                                                used. If the "override" policy is chosen the
                                                requirements specified in the PortInterface and in
                                                the ComSpec are not fulfilled by the
                                                networkRepresentationProps. In case the System
                                                Description doesnt use a complete Software
                                                Component Description (VFB View) the "legacy"
                                                policy can be chosen.
 iSignalPro   ISignalProps       0..1    aggr   Additional optional ISignal properties that may be
 ps                                             stored in different files.
                                                Stereotypes: atpSplitable
                                                Tags: atp.Splitkey=iSignalProps
 Class         ISignalGroup
 Package       M2::AUTOSARTemplates::SystemTemplate::Fibex::FibexCore::CoreCommunication
 Note          SignalGroup of the Interaction Layer. The RTE supports a "signal fan-out" where the
               same System Signal Group is sent in different SignalIPdus to multiple receivers.
               Tags: atp.recommendedPackage=ISignalGroup
 Base          ARObject, CollectableElement, FibexElement, Identifiable, MultilanguageReferrable,
               PackageableElement, Referrable
 Attribute     Type              Mul. Kind Note
 comBased      DataTransforma     0..1   ref    Optional reference to a DataTransformation which
 SignalGrou    tion                             represents the transformer chain that is used to
 pTransfor                                      transform the data that shall be placed inside this
 mation                                         ISignalGroup based on the
                                                COMBasedTransformer approach.
 Class         ISignalProps
 Package       M2::AUTOSARTemplates::SystemTemplate::Fibex::FibexCore::CoreCommunication
 Note          Additional ISignal properties that may be stored in different files.
 Base          ARObject
 Attribute     Type                Mul. Kind Note
 handleOut     HandleOutOfRa         1      attr   This attribute defines the outOfRangeHandling for
 OfRange       ngeEnum                             received and sent signals.
                                                    Tags: xml.sequenceOffset=-60
 category      CategoryString       0..1    attr    The category is a keyword that specializes the
                                                    semantics of the Identifiable. It affects the
                                                    expected existence of attributes and the
                                                    applicability of constraints.
                                                    Tags: xml.sequenceOffset=-50
 adminData     AdminData            0..1    aggr    This represents the administrative data for the
                                                    identifiable object.
                                                    Tags: xml.sequenceOffset=-40
 annotation    Annotation            *      aggr    Possibility to provide additional notes while
                                                    defining a model element (e.g. the ECU
                                                    Configuration Parameter Values). These are not
                                                    intended as documentation but are mere design
                                                    notes.
                                                    Tags: xml.sequenceOffset=-25
 introductio   Documentation        0..1    aggr    This represents more information about how the
 n             Block                                object in question is built or is used. Therefore it is
                                                    a DocumentationBlock.
Tags: xml.sequenceOffset=-30
Tags: xml.attribute=true
                                                  Stereotypes: atpVariation
                                                  Tags: vh.latestBindingTime=codeGenerationTime
 codeDescri    Code                1..*   aggr    Specifies the provided implementation code.
 ptor
 compiler      Compiler             *     aggr    Specifies the compiler for which this
                                                  implementation has been released
 generated     DependencyOn         *     aggr    Relates to an artifact that will be generated during
 Artifact      Artifact                           the integration of this Implementation by an
                                                  associated generator tool. Note that this is an
                                                  optional information since it might not always be in
                                                  the scope of a single module or component to
                                                  provide this information.
                                                  Stereotypes: atpVariation
                                                  Tags: vh.latestBindingTime=preCompileTime
                                               Stereotypes: atpSplitable
                                               Tags: atp.Splitkey=mcSupport
 programmi     Programmingla      1     attr   Programming language the implementation was
 ngLanguag     nguageEnum                      created in.
 e
 requiredArt   DependencyOn       *     aggr   Specifies that this Implementation depends on the
 ifact         Artifact                        existance of another artifact (e.g. a library). This
                                               aggregation of DependencyOnArtifact is subject to
                                               variability with the purpose to support variability in
                                               the implementations. Different algorithms in the
                                               implementation might cause different
                                               dependencies, e.g. the number of used libraries.
                                               Stereotypes: atpVariation
                                               Tags: vh.latestBindingTime=preCompileTime
 requiredGe    DependencyOn       *     aggr   Relates this Implementation to a generator tool in
 neratorToo    Artifact                        order to generate additional artifacts during
 l                                             integration.
                                               Stereotypes: atpVariation
                                               Tags: vh.latestBindingTime=preCompileTime
 resourceC     ResourceConsu      1     aggr   All static and dynamic resources for each
 onsumptio     mption                          implementation are described within the
 n                                             ResourceConsumption class.
                                               Stereotypes: atpSplitable
                                               Tags: atp.Splitkey=shortName
 swVersion     RevisionLabelSt    1     attr   Software version of this implementation. The
               ring                            numbering contains three levels (like major, minor,
                                               patch), its values are vendor specific.
 swcBswMa      SwcBswMappin      0..1   ref    This allows a mapping between an SWC and a
 pping         g                               BSW behavior to be attached to an
                                               implementation description (for AUTOSAR
                                               Service, ECU Abstraction and Complex Driver
                                               Components). It is up to the methodology to
                                               define whether this reference has to be set for the
                                               Swc- or BswImplementtion or for both.
 usedCode      String            0..1   attr   Optional: code generator used.
 Generator
 vendorId      PositiveInteger    1     attr   Vendor ID of this Implementation according to the
                                               AUTOSAR vendor list
 Class         ImplementationDataType
 Package       M2::AUTOSARTemplates::CommonStructure::ImplementationDataTypes
 Note          Describes a reusable data type on the implementation level. This will typically
               correspond to a typedef in C-code.
               Tags: atp.recommendedPackage=ImplementationDataTypes
 Base          ARElement, ARObject, AtpBlueprint, AtpBlueprintable, AtpClassifier, AtpType,
               AutosarDataType, CollectableElement, Identifiable, MultilanguageReferrable,
               PackageableElement, Referrable
 Attribute     Type              Mul. Kind Note
 dynamicAr     String            0..1     attr Specifies the profile which the array will follow in
 raySizePro                                    case this data type is a variable size array.
 file
 subElemen     Implementation       *      aggr   Specifies an element of an array, struct, or union
 t (ordered)   DataTypeEleme                      data type.
               nt
                                                  The aggregation of
                                                  ImplementionDataTypeElement is subject to
                                                  variability with the purpose to support the
                                                  conditional existence of elements inside a
                                                  ImplementationDataType representing a structure.
                                                  Stereotypes: atpVariation
                                                  Tags: vh.latestBindingTime=preCompileTime
 symbolPro     SymbolProps         0..1    aggr   This represents the SymbolProps for the
 ps                                               ImplementationDataType.
                                                  Stereotypes: atpSplitable
                                                  Tags: atp.Splitkey=shortName
 typeEmitte    NameToken           0..1    attr   This attribute is used to control which part of the
 r                                                AUTOSAR toolchain is supposed to trigger data
                                                  type definitions.
 Class         ImplementationDataTypeElement
 Package       M2::AUTOSARTemplates::CommonStructure::ImplementationDataTypes
 Note          Declares a data object which is locally aggregated. Such an element can only be
               used within the scope where it is aggregated.
               This element either consists of further subElements or it is further defined via its
               swDataDefProps.
               There are several use cases within the system of ImplementationDataTypes fur such
               a local declaration:
                    It can represent the elements of an array, defining the element type and array
                     size
                    It can represent an element of a struct, defining its type
                    It can be the local declaration of a debug element.
                                                    Stereotypes: atpVariation
                                                    Tags: vh.latestBindingTime=preCompileTime
 arraySizeH    ArraySizeHandli     0..1     attr    The way how the size of the array is handled in
 andling       ngEnum                               case of a variable size array.
 arraySizeS    ArraySizeSema       0..1     attr    This attribute controls the meaning of the value of
 emantics      nticsEnum                            the array size.
 subElemen     Implementation        *     aggr     Element of an array, struct, or union in case of a
 t (ordered)   DataTypeEleme                        nested declaration (i.e. without using "typedefs").
               nt
                                                    The aggregation of
                                                    ImplementionDataTypeElement is subject to
                                                    variability with the purpose to support the
                                                    conditional existence of elements inside a
                                                    ImplementationDataType representing a structure.
                                                    Stereotypes: atpVariation
                                                    Tags: vh.latestBindingTime=preCompileTime
 swDataDef     SwDataDefProp       0..1    aggr     The properties of this
 Props         s                                    ImplementationDataTypeElementt.
 Class           IncludedDataTypeSet
 Package         M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior::Included
                 DataTypes
 Note            An includedDataTypeSet declares that a set of AutosarDataType is used by a basic
                 software module or a software component for its implementation and the
                 AutosarDataType becomes part of the contract.
                 This information is required if the AutosarDataType is not used for any DataPrototype
                 owned by this software component or if the enumeration literals, lowerLimit and
                 upperLimit constants shall be generated with a literalPrefix.
 Class           IncludedModeDeclarationGroupSet
 Package         M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior::Mode
                 DeclarationGroup
 Note            An IncludedModeDeclarationGroupSet declares that a set of ModeDeclarationGroups
                 used by the software component for its implementation and consequently these
                 ModeDeclarationGroups become part of the contract.
 Base            ARObject
 Attribute       Type               Mul. Kind Note
 modeDecl        ModeDeclaratio     1..*   ref    This represents the referenced
 arationGro      nGroup                           ModeDeclarationGroup.
 up
 Class         InitEvent
 Package       M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior::RTE
               Events
 Note          This RTEEvent is supposed to be used for initialization purposes, i.e. for starting and
               restarting a partition. It is not guaranteed that all RunnableEntities referenced by this
               InitEvent are executed before the regular RunnableEntities are executed for the first
               time. The execution order depends on the task mapping.
 Base          ARObject, AbstractEvent, AtpClassifier, AtpFeature, AtpStructureElement,
               Identifiable, MultilanguageReferrable, RTEEvent, Referrable
 Attribute     Type                  Mul. Kind Note
                                                  
 Class         InstantiationDataDefProps
 Package       M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior::
               InstantiationDataDefProps
 Note          This is a general class allowing to apply additional SwDataDefProps to particular
               instantiations of a DataPrototype.
               Typically the accessibility and further information like alias names for a particular data
               is modeled on the level of DataPrototypes (especially VariableDataPrototypes,
               ParameterDataPrototypes). But due to the recursive structure of the meta-model
               concerning data types (a composite (data) type consists out of data prototypes) a part
               of the MCD information is described in the data type (in case of
               ApplicationCompositeDataType).
               This is a strong restriction in the reuse of data typed because the data type should be
               re-used for different VariableDataPrototypes and ParameterDataPrototypes to
               guarantee type compatibility on C-implementation level (e.g. data of a Port is stored
               in PIM or a ParameterDataPrototype used as ROM Block and shall be typed by the
               same data type as NVRAM Block).
                                             Stereotypes: atpSplitable
                                             Tags: atp.Splitkey=dataTypeMapping
 exclusiveA   ExclusiveArea      *    aggr   This specifies an ExclusiveArea for this
 rea                                         InternalBehavior. The exclusiveArea is local to the
                                             component resp. module. The aggregation of
                                             ExclusiveAreas is subject to variability. Note: the
                                             number of ExclusiveAreas might vary due to the
                                             conditional existence of RunnableEntities or
                                             BswModuleEntities.
 Class        InternalTriggerOccurredEvent
 Package      M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior::RTE
              Events
 Note         The event is raised when the referenced internal trigger have been occurred.
 Base         ARObject, AbstractEvent, AtpClassifier, AtpFeature, AtpStructureElement,
              Identifiable, MultilanguageReferrable, RTEEvent, Referrable
 Attribute    Type                  Mul. Kind Note
 eventSour    InternalTriggerin      1    ref    Internal Triggering Point that triggers the event.
 ce           gPoint
 Class        InternalTriggeringPoint
 Package      M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior::Trigger
 Note         If a RunnableEntity owns a InternalTriggeringPoint it is entitled to trigger the execution
              of RunnableEntities of the corresponding software-component.
 Base         ARObject, AbstractAccessPoint, AtpClassifier, AtpFeature, AtpStructureElement,
              Identifiable, MultilanguageReferrable, Referrable
 Attribute    Type                  Mul. Kind Note
 swImplPoli   SwImplPolicyEn        0..1  attr   This attribute, when set to value queued, allows
 cy           um                                 for a queued processing of Triggers.
 Class        InvalidationPolicy
 Package      M2::AUTOSARTemplates::SWComponentTemplate::PortInterface
 Note         Specifies whether the component can actively invalidate a particular dataElement.
 Class        McDataInstance
 Package      M2::AUTOSARTemplates::CommonStructure::MeasurementCalibrationSupport
 Note         Describes the specific properties of one data instance in order to support
              measurement and/or calibration of this data instance.
              It is assumed that in the M1 model this part and all the aggregated and referred
              elements (with the exception of the Flat Map and the references from
              ImplementationElementInParameterInstanceRef and McAccessDetails) are
              completely generated from "upstream" information. This means, that even if an
              element like e.g. a CompuMethod is only used via reference here, it will be copied into
              the M1 artifact which holds the complete McSupportData for a given Implementation.
 Base         ARObject, Identifiable, MultilanguageReferrable, Referrable
 Attribute    Type                 Mul. Kind Note
 arraySize    PositiveInteger      0..1     attr The existence of this attribute turns the data
                                                 instance into an array of data. The attribute
                                                 determines the size of the array in terms of
                                                 number of elements.
 displayIde   McdIdentifier        0..1     attr An optional attribute to be used to set the ASAM
 ntifier                                         ASAP2 DISPLAY_IDENTIFIER attribute.
 flatMapEnt   FlatInstanceDes      0..1     ref  Reference to the corresponding entry in the ECU
 ry           criptor                            Flat Map. This allows to trace back to the original
                                                 specification of the generated data instance. This
                                                 link shall be added by the RTE generator mainly
                                                 for documentation purposes.
                                              Stereotypes: atpVariation
                                              Tags: vh.latestBindingTime=preCompileTime
 Class        McParameterElementGroup
 Package      M2::AUTOSARTemplates::CommonStructure::MeasurementCalibrationSupport
 Note         Denotes a group of calibration parameters which are handled by the RTE as one data
              structure.
 Base         ARObject
 Attribute    Type               Mul. Kind Note
 ramLocatio   VariableDataPr      1        ref   Refers to the RAM location of this parameter
 n            ototype                            group. To be used for the init-RAM method.
 romLocatio   ParameterData       1        ref   Refers to the ROM location of this parameter
 n            Prototype                          group. To be used for the init-RAM method.
 shortLabel   Identifier          1       attr   Assigns a name to this element.
Tags: xml.sequenceOffset=-100
 Class         McSupportData
 Package       M2::AUTOSARTemplates::CommonStructure::MeasurementCalibrationSupport
 Note          Root element for all measurement and calibration support data related to one
               Implementation artifact on an ECU. There shall be one such element related to the
               RTE implementation (if it owns MC data) and a separate one for each module or
               component, which owns private MC data.
 Base          ARObject
 Attribute     Type                Mul. Kind Note
 emulationS    McSwEmulation         *     aggr Describes the calibration method used by the
 upport        MethodSupport                     RTE. This information is not needed for A2L
                                                 generation, but to setup software emulation in the
                                                 ECU.
                                                 Stereotypes: atpVariation
                                                 Tags: vh.latestBindingTime=preCompileTime
 mcParame      McDataInstance       *     aggr   A data instance to be used for calibration.
 terInstance
                                                 Stereotypes: atpSplitable; atpVariation
                                                 Tags: atp.Splitkey=shortName, variation
                                                 Point.shortLabel
                                                 vh.latestBindingTime=postBuild
 mcVariable    McDataInstance       *     aggr   A data instance to be used for measurement.
 Instance
                                                 Stereotypes: atpSplitable; atpVariation
                                                 Tags: atp.Splitkey=shortName, variation
                                                 Point.shortLabel
                                                 vh.latestBindingTime=postBuild
 measurabl     SwSystemconst        *      ref   Sets of system constant values to be transferred
 eSystemC      antValueSet                       to the MCD system, because the system
 onstantVal                                      constants have been specified with
 ues                                             "swCalibrationAccess" = readonly.
 rptSupport    RptSupportData     0..1    aggr   The rapid prototyping support data belonging to
 Data                                            this implementation. The aggregtion is
                                                 atpSplitable because in case of an already
                                                 exisiting BSW Implementation model, this
                                                 description will be added later in the process,
                                                 namely at code generation time.
                                                 Stereotypes: atpSplitable
                                                 Tags: atp.Splitkey=rptSupportData
 Class         McSwEmulationMethodSupport
 Package       M2::AUTOSARTemplates::CommonStructure::MeasurementCalibrationSupport
 Note          This denotes the method used by the RTE to handle the calibration data. It is
               published by the RTE generator and can be used e.g. to generate the corresponding
               emulation method in a Complex Driver.
               According to the actual method given by the category attribute, not all attributes are
               always needed:
                    double pointered method: only baseReference is mandatory
                    single pointered method: only referenceTable is mandatory
                    initRam method: only elementGroup(s) are mandatory
               Note: For single/double pointered method the group locations are implicitly accessed
               via the reference table and their location can be found from the initial values in the M1
               model of the respective pointers. Therefore, the description of elementGroups is not
               needed in these cases. Likewise, for double pointered method the reference table
               description can be accessed via the M1 model under baseReference.
 Base          ARObject
 Attribute     Type                Mul. Kind Note
 category      Identifier            1      attr    Identifies the actual method. The possible names
                                                    shall correspond to the symbols of the ECU
                                                    configuration parameter for the calibration method
                                                    of the RTE, and can include vendor specific
                                                    methods.
                                                   Tags: xml.sequenceOffset=-90
 baseRefer     VariableDataPr      0..1     ref    Refers to the base pointer in case of the
 ence          ototype                             double-pointered method.
 elementGr     McParameterEl         *     aggr    Denotes the grouping of calibration parameters in
 oup           ementGroup                          the actual RTE code. Depending on the category,
                                                   this information maybe required to set up the
                                                   emulation code.
 referenceT    VariableDataPr      0..1     ref    Refers to the pointer table in case of the
 able          ototype                             single-pointered method.
 shortLabel    Identifier            1      attr   Assigns a name to this element.
Tags: xml.sequenceOffset=-100
 Enumeration     MemoryAllocationKeywordPolicyType
 Package         M2::MSR::DataDictionary::AuxillaryObjects
 Note            Enumeration to specify the name pattern of the Memory Allocation Keyword.
 Literal         Description
 addrMethod      The MemorySection shortNames of referring MemorySections and therefore the
 ShortName       belonging Memory Allocation Keywords in the code are build with the shortName of
                 the SwAddrMethod. This is the default value if the attribute does not exist.
Tags: atp.EnumerationValue=0
Tags: atp.EnumerationValue=1
 Class        MemorySection
 Package      M2::AUTOSARTemplates::CommonStructure::ResourceConsumption::Memory
              SectionUsage
 Note         Provides a description of an abstract memory section used in the Implementation for
              code or data. It shall be declared by the Implementation Description of the module or
              component, which actually allocates the memory in its code. This means in case of
              data prototypes which are allocated by the RTE, that the generated Implementation
              Description of the RTE shall contain the corresponding MemorySections.
              The attribute "symbol" (if symbol is missing: "shortName") defines the module or
              component specific section name used in the code. For details see the document
              "Specification of Memory Mapping". Typically the section name is build according the
              pattern:
              In addition to the section name described above, a prefix is used in the corresponding
              macro code in order to define a name space. This prefix is by default given by the
              shortName of the BswModuleDescription resp. the SwComponentType. It can be
              superseded by the prefix attribute.
 Base         ARObject, Identifiable, MultilanguageReferrable, Referrable
 Attribute    Type                 Mul. Kind Note
 alignment    AlignmentType        0..1     attr  The attribute describes the alignment of objects
                                                  within this memory section.
 Class        ModeAccessPoint
 Package      M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior::Mode
              DeclarationGroup
 Note         A ModeAccessPoint is required by a RunnableEntity owned by a Mode Manager or
              Mode User. Its semantics implies the ability to access the current mode (provided by
              the RTE) of a ModeDeclarationGroupPrototypes ModeDeclarationGroup.
 Base         ARObject
 Attribute    Type              Mul. Kind Note
 ident        ModeAccessPoi     0..1    aggr The aggregation in the role ident provides the
              ntIdent                            ability to make the ModeAccessPoint identifiable.
                                                 Tags: atp.Status=shallBecomeMandatory
                                                 xml.sequenceOffset=-100
 modeGrou     ModeDeclaratio     0..1     iref   The mode declaration group that is accessed by
 p            nGroupPrototyp                     this runnable.
              e
                                                 Tags: xml.typeElement=true
 Enumeration      ModeActivationKind
 Package          M2::AUTOSARTemplates::CommonStructure::ModeDeclaration
 Note             Kind of mode switch condition used for activation of an event, as further described
                  for each enumeration field.
 Literal          Description
 onEntry          On entering the referred mode.
                  Tags: atp.EnumerationValue=0
 onExit           On exiting the referred mode.
                  Tags: atp.EnumerationValue=1
 onTransition     On transition of the 1st referred mode to the 2nd referred mode.
Tags: atp.EnumerationValue=2
 Class          ModeDeclaration
 Package        M2::AUTOSARTemplates::CommonStructure::ModeDeclaration
 Note           Declaration of one Mode. The name and semantics of a specific mode is not defined
                in the meta-model.
 Base           ARObject, AtpClassifier, AtpFeature, AtpStructureElement, Identifiable,
                MultilanguageReferrable, Referrable
 Attribute      Type               Mul. Kind Note
 value          PositiveInteger     0..1    attr  The RTE shall take the value of this attribute for
                                                  generating the source code representation of this
                                                  ModeDeclaration.
 Class          ModeDeclarationGroup
 Package        M2::AUTOSARTemplates::CommonStructure::ModeDeclaration
 Note           A collection of Mode Declarations. Also, the initial mode is explicitly identified.
                Tags: atp.recommendedPackage=ModeDeclarationGroups
 Base           ARElement, ARObject, AtpBlueprint, AtpBlueprintable, AtpClassifier, AtpType,
                CollectableElement, Identifiable, MultilanguageReferrable, PackageableElement,
                Referrable
 Attribute      Type              Mul. Kind Note
 initialMode    ModeDeclaratio       1       ref   The initial mode of the ModeDeclarationGroup.
                n                                  This mode is active before any mode switches
                                                   occurred.
                                                 Stereotypes: atpVariation
                                                 Tags: vh.latestBindingTime=blueprintDerivation
                                                 Time
 modeMana      ModeErrorBeha      0..1    aggr   This represents the ability to define the error
 gerErrorBe    vior                              behavior expected by the mode manager in case
 havior                                          of errors on the mode user side (e.g. terminated
                                                 mode user).
 modeTran      ModeTransition       *     aggr   This represents the avaliable ModeTransitions of
 sition                                          the ModeDeclarationGroup
 modeUser      ModeErrorBeha      0..1    aggr   This represents the definition of the error behavior
 ErrorBeha     vior                              expected by the mode user in case of errors on
 vior                                            the mode manager side (e.g. terminated mode
                                                 manager).
 onTransitio   PositiveInteger    0..1    attr   The value of this attribute shall be taken into
 nValue                                          account by the RTE generator for
                                                 programmatically representing a value used for
                                                 the transition between two statuses.
 Class         ModeDeclarationGroupPrototype
 Package       M2::AUTOSARTemplates::CommonStructure::ModeDeclaration
 Note          The ModeDeclarationGroupPrototype specifies a set of Modes
               (ModeDeclarationGroup) which is provided or required in the given context.
 Base          ARObject, AtpFeature, AtpPrototype, Identifiable, MultilanguageReferrable,
               Referrable
 Attribute     Type              Mul. Kind Note
 swCalibrati   SwCalibrationA    0..1    attr   This allows for specifying whether or not the
 onAccess      ccessEnum                        enclosing ModeDeclarationGroupPrototype can
                                                be measured at run-time.
 type          ModeDeclaratio     1      tref   The "collection of ModeDeclarations" ( =
               nGroup                           ModeDeclarationGroup) supported by a
                                                component
Stereotypes: isOfType
 Class         ModeDeclarationMappingSet
 Package       M2::AUTOSARTemplates::SWComponentTemplate::PortInterface
 Note          This meta-class implements a container for ModeDeclarationGroupMappings
               Tags: atp.recommendedPackage=PortInterfaceMappingSets
 Base          ARElement, ARObject, AtpClassifier, AtpType, CollectableElement, Identifiable,
               MultilanguageReferrable, PackageableElement, Referrable
 Attribute     Type              Mul. Kind Note
 Class         ModeErrorBehavior
 Package       M2::AUTOSARTemplates::CommonStructure::ModeDeclaration
 Note          This represents the ability to define the error behavior in the context of mode handling.
 Base          ARObject
 Attribute     Type                Mul. Kind Note
 defaultMod    ModeDeclaratio      0..1       ref    This represents the ModeDeclaration that is
 e             n                                     considered the error mode in the context of the
                                                     enclosing ModeDeclarationGroup.
 errorReacti   ModeErrorReac        1        attr    This represents the ability to define the policy in
 onPolicy      tionPolicyEnum                        terms of which default model shall apply in case
                                                     an error occurs.
 Enumeration     ModeErrorReactionPolicyEnum
 Package         M2::AUTOSARTemplates::CommonStructure::ModeDeclaration
 Note            This represents the ability to specify the reaction on a mode error.
 Literal         Description
 defaultMode     This represents the ability to switch to the defaultMode in case of a mode error.
                 Tags: atp.EnumerationValue=0
 lastMode        This represents the ability to keep the last mode in case of a mode error.
Tags: atp.EnumerationValue=1
 Class         ModeInterfaceMapping
 Package       M2::AUTOSARTemplates::SWComponentTemplate::PortInterface
 Note          Defines the mapping of ModeDeclarationGroupPrototypes in context of two different
               ModeInterfaces.
 Base          ARObject, AtpBlueprint, AtpBlueprintable, Identifiable, MultilanguageReferrable, Port
               InterfaceMapping, Referrable
 Attribute     Type               Mul. Kind Note
 modeMapp      ModeDeclaratio      1      aggr Mapping of two ModeDeclarationGroupPrototypes
 ing           nGroupPrototyp                    in two different ModeInterfaces
               eMapping
 Class        ModeRequestTypeMap
 Package      M2::AUTOSARTemplates::CommonStructure::ModeDeclaration
 Note         Specifies a mapping between a ModeDeclarationGroup and an
              ImplementationDataType. This ImplementationDataType shall be used to implement
              the ModeDeclarationGroup.
 Base         ARObject
 Attribute    Type              Mul. Kind Note
 implement    Implementation      1     ref   This is the corresponding
 ationDataT   DataType                        ImplementationDataType. It shall be modeled
 ype                                          along the idea of an "unsigned integer-like" data
                                              type.
 modeGrou     ModeDeclaratio      1     ref   This is the corresponding ModeDeclarationGroup.
 p            nGroup
 Class        ModeSwitchInterface
 Package      M2::AUTOSARTemplates::SWComponentTemplate::PortInterface
 Note         A mode switch interface declares a ModeDeclarationGroupPrototype to be sent and
              received.
              Tags: atp.recommendedPackage=PortInterfaces
 Base         ARElement, ARObject, AtpBlueprint, AtpBlueprintable, AtpClassifier, AtpType,
              CollectableElement, Identifiable, MultilanguageReferrable, PackageableElement, Port
              Interface, Referrable
 Attribute    Type                Mul. Kind Note
 modeGrou     ModeDeclaratio        1     aggr The ModeDeclarationGroupPrototype of this mode
 p            nGroupPrototyp                     interface.
              e
 Class        ModeSwitchPoint
 Package      M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior::Mode
              DeclarationGroup
 Note         A ModeSwitchPoint is required by a RunnableEntity owned a Mode Manager. Its
              semantics implies the ability to initiate a mode switch.
 Base         ARObject, AbstractAccessPoint, AtpClassifier, AtpFeature, AtpStructureElement,
              Identifiable, MultilanguageReferrable, Referrable
 Attribute    Type                  Mul. Kind Note
 modeGrou     ModeDeclaratio        0..1   iref     The mode declaration group that is switched by
 p            nGroupPrototyp                        this runnable.
              e
 Class        ModeSwitchReceiverComSpec
 Package      M2::AUTOSARTemplates::SWComponentTemplate::Communication
 Note         Communication attributes of RPortPrototypes with respect to mode communication
 Base         ARObject, RPortComSpec
 Attribute    Type              Mul. Kind Note
 enhanced     Boolean            0..1    attr  This controls the creation of the enhanced mode
 ModeApi                                       API that returns information about the previous
                                               mode and the next mode. If set to "true" the
                                               enhanced mode API is supposed to be generated.
                                               For more details please refer to the SWS_RTE.
 modeGrou     ModeDeclaratio     0..1     ref  ModeDeclarationGroupPrototype (of the same
 p            nGroupPrototyp                   PortInterface) to which these communication
              e                                attributes apply.
                                                Tags: atp.Status=shallBecomeMandatory
 supportsAs   Boolean             1      attr   This attribute controls the behavior of the
 ynchronou                                      corresponding RPortPrototype with respect to the
 sModeSwit                                      question whether it can deal with asynchronous
 ch                                             mode switch requests, i.e. if set to true, the
                                                RPortPrototype is able to deal with an
                                                asynchronous mode switch request.
 Class        ModeSwitchSenderComSpec
 Package      M2::AUTOSARTemplates::SWComponentTemplate::Communication
 Note         Communication attributes of PPortPrototypes with respect to mode communication
 Base         ARObject, PPortComSpec
 Attribute    Type              Mul. Kind Note
 enhanced     Boolean            0..1    attr   This controls the creation of the enhanced mode
 ModeApi                                        API that returns information about the previous
                                                mode and the next mode. If set to "true" the
                                                enhanced mode API is supposed to be generated.
                                                For more details please refer to the SWS_RTE.
 modeGrou     ModeDeclaratio      1       ref   ModeDeclarationGroupPrototype (of the same
 p            nGroupPrototyp                    PortInterface) to which these communication
              e                                 attributes apply.
 modeSwitc    ModeSwitchedA      0..1   aggr If this aggregation exists an acknowledgement for
 hedAck       ckRequest                         the successful processing of the mode switch
                                                request is required.
 queueLeng    PositiveInteger     1      attr   Length of call queue on the mode user side. The
 th                                             queue is implemented by the RTE. The value shall
                                                be greater or equal to 1. Setting the value of
                                                queueLength to 1 implies that incoming requests
                                                are rejected while another request that arrived
                                                earlier is being processed.
 Class        ModeSwitchedAckEvent
 Package      M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior::RTE
              Events
 Note         The event is raised when the referenced modes have been received or an error
              occurs.
 Base         ARObject, AbstractEvent, AtpClassifier, AtpFeature, AtpStructureElement,
              Identifiable, MultilanguageReferrable, RTEEvent, Referrable
 Attribute    Type                  Mul. Kind Note
 eventSour    ModeSwitchPoi          1    ref    Mode switch point that triggers the event.
 ce           nt
 Class        ModeSwitchedAckRequest
 Package      M2::AUTOSARTemplates::SWComponentTemplate::Communication
 Note         Requests acknowledgements that a mode switch has been proceeded successfully
 Base         ARObject
 Attribute    Type             Mul. Kind Note
 timeout      TimeValue         1     attr    Number of seconds before an error is reported or
                                              in case of allowed redundancy, the value is sent
                                              again.
 Class        NonqueuedReceiverComSpec
 Package      M2::AUTOSARTemplates::SWComponentTemplate::Communication
 Note         Communication attributes specific to non-queued receiving.
 Base         ARObject, RPortComSpec, ReceiverComSpec
 Attribute    Type              Mul. Kind Note
 aliveTimeo   TimeValue           1      attr    Specify the amount of time (in seconds) after
 ut                                              which the software component (via the RTE)
                                                 needs to be notified if the corresponding data item
                                                 have not been received according to the specified
                                                 timing description.
 handleTim     HandleTimeout         1      attr   This attribute controls the behavior with respect to
 eoutType      Enum                                the handling of timeouts.
 initValue     ValueSpecificati    0..1    aggr    Initial value to be used in case the sending
               on                                  component is not yet initialized. If the sender also
                                                   specifies an initial value the receivers value will be
                                                   used.
 timeoutSu     ValueSpecificati    0..1    aggr    This attribute represents the substitution value
 bstitutionV   on                                  applicable in the case of a timeout.
 alue
 Class         NonqueuedSenderComSpec
 Package       M2::AUTOSARTemplates::SWComponentTemplate::Communication
 Note          Communication attributes for non-queued sender/receiver communication (sender
               side)
 Base          ARObject, PPortComSpec, SenderComSpec
 Attribute     Type              Mul. Kind Note
 initValue     ValueSpecificati    1      aggr Initial value to be sent if sender component is not
               on                                yet fully initialized, but receiver needs data already.
 Class         NumericalRuleBasedValueSpecification
 Package       M2::AUTOSARTemplates::CommonStructure::Constants
 Note          This meta-class is used to support a rule-based initialization approach for data types
               with an array-nature (ImplementationDataType of category ARRAY).
 Base          ARObject, AbstractRuleBasedValueSpecification, ValueSpecification
 Attribute     Type                Mul. Kind Note
 ruleBased     RuleBasedValu         1     aggr This represents the rule based value specification
 Values        eSpecification                     for the array.
 Class        NumericalValueSpecification
 Package      M2::AUTOSARTemplates::CommonStructure::Constants
 Note         A numerical ValueSpecification which is intended to be assigned to a Primitive data
              element. Note that the numerical value is a variant, it can be computed by a formula.
 Base         ARObject, ValueSpecification
 Attribute    Type                Mul. Kind Note
 value        Numerical            1     attr    This is the value itself.
                                                 Stereotypes: atpVariation
                                                 Tags: vh.latestBindingTime=preCompileTime
 Class        NvBlockDataMapping
 Package      M2::AUTOSARTemplates::SWComponentTemplate::NvBlockComponent
 Note         Defines the mapping between the VariableDataPrototypes in the
              NvBlockComponents ports and the VariableDataPrototypes of the RAM Block.
              The data types of the referenced VariableDataPrototypes in the ports and the
              referenced sub-element (inside a CompositeDataType) of the VariableDataPrototype
              representing the RAM Block shall be compatible.
 Base         ARObject
 Attribute    Type                Mul. Kind Note
 nvRamBlo     AutosarVariable      1      aggr Reference to a VariableDataPrototype of a RAM
 ckElement    Ref                               Block.
 readNvDat    AutosarVariable     0..1    aggr Reference to a VariableDataPrototype of a pPort
 a            Ref                               of the NvBlockComponent providing read access
                                                to the RAM Block.If there is no PortPrototype
                                                providing read access (write-only) the reference
                                                can be omitted.
 writtenNvD   AutosarVariable     0..1    aggr Reference to a VariableDataPrototype of a rPort of
 ata          Ref                               the NvBlockComponent providing write access to
                                                the RAM Block. If there is no port providing write
                                                access (read-only) the reference can be omitted.
 writtenRea   AutosarVariable     0..1    aggr Reference to a VariableDataPrototype of a
 dNvData      Ref                               PRPortPrototype of the
                                                NvBlockSwComponentType providing write and
                                                read access to the RAM Block.
 Class          NvBlockDescriptor
 Package        M2::AUTOSARTemplates::SWComponentTemplate::NvBlockComponent
 Note           Specifies the properties of exactly on NVRAM Block.
 Base           ARObject, AtpClassifier, AtpFeature, AtpStructureElement, Identifiable,
                MultilanguageReferrable, Referrable
 Attribute      Type               Mul. Kind Note
 clientServe    RoleBasedPort         *      aggr The RoleBasedPortAssignement defines which
 rPort          Assignment                           client server port of the
                                                     NvBlockSwComponentType serves for which kind
                                                     of service or notification. In case of notifications
                                                     one common callback function is provided by the
                                                     RTE for each individual kind of notification defined
                                                     by the "role".
                                                    Stereotypes: atpVariation
                                                    Tags: vh.latestBindingTime=preCompileTime
 constantVa     ConstantSpecifi       *      ref    Reference to the ConstanSpecificationMapping to
 lueMappin      cationMappingS                      be applied for the particular NVRAM Block
 g              et
                                                    Stereotypes: atpSplitable
                                                    Tags: atp.Splitkey=constantValueMapping
 dataTypeM      DataTypeMappi         *      ref    Reference to the DataTypeMapping to be applied
 apping         ngSet                               for the particular NVRAM Block.
                                                    Stereotypes: atpSplitable
                                                    Tags: atp.Splitkey=dataTypeMapping
 instantiatio   InstantiationDat      *     aggr    The purpose of InstantiationDataDefProps are the
 nDataDefP      aDefProps                           refinement of some data def properties of
 rops                                               individual instantiations within the context of a
                                                    NvBlockSwComponentType.
                                                    Stereotypes: atpVariation
                                                    Tags: vh.latestBindingTime=preCompileTime
 modeSwitc      ModeSwitchEve         *     aggr    This represents the collection of
 hEventTrig     ntTriggeredActiv                    ModeSwitchEventTriggeredActivities related to the
 geredActivi    ity                                 enclosing NvBlockDescriptor.
 ty
                                                    Stereotypes: atpSplitable; atpVariation
                                                    Tags: atp.Splitkey=modeSwitchEventTriggered
                                                    Activity, variationPoint.shortLabel
                                                    vh.latestBindingTime=preCompileTime
                                                   Stereotypes: atpVariation
                                                   Tags: vh.latestBindingTime=preCompileTime
 nvBlockNe      NvBlockNeeds         1     aggr    Specifies the abstract needs on the configuration
 eds                                               of the NVRAM Manager for the single NVRAM
                                                   Block described by this NvBlockDescriptor.
 Class          NvBlockNeeds
 Package        M2::AUTOSARTemplates::CommonStructure::ServiceNeeds
 Note           Specifies the abstract needs on the configuration of a single NVRAM Block.
 Base           ARObject, Identifiable, MultilanguageReferrable, Referrable, ServiceNeeds
 Attribute      Type                Mul. Kind Note
 calcRamBl      Boolean             0..1      attr Defines if CRC (re)calculation for the permanent
 ockCrc                                            RAM Block is required.
 checkStati     Boolean             0..1      attr Defines if the Static Block Id check shall be
 cBlockId                                          enabled.
 cyclicWritin   TimeValue           0..1      attr This represents the period for cyclic writing of
 gPeriod                                           NvData to store the associated RAM Block.
 Class          NvBlockSwComponentType
 Package        M2::AUTOSARTemplates::SWComponentTemplate::Components
 Note           The NvBlockSwComponentType defines non volatile data which data can be shared
                between SwComponentPrototypes. The non volatile data of the
                NvBlockSwComponentType are accessible via provided and required ports.
                Tags: atp.recommendedPackage=SwComponentTypes
 Base           ARElement, ARObject, AtomicSwComponentType, AtpBlueprint, AtpBlueprintable,
                AtpClassifier, AtpType, CollectableElement, Identifiable, MultilanguageReferrable,
                PackageableElement, Referrable, SwComponentType
 Attribute      Type                Mul. Kind Note
 nvBlockDe      NvBlockDescrip       *      aggr Specification of the properties of exactly one
 scriptor       tor                                NVRAM Block.
 Class          NvDataInterface
 Package        M2::AUTOSARTemplates::SWComponentTemplate::PortInterface
 Note           A non volatile data interface declares a number of VariableDataPrototypes to be
                exchanged between non volatile block components and atomic software components.
                Tags: atp.recommendedPackage=PortInterfaces
 Base           ARElement, ARObject, AtpBlueprint, AtpBlueprintable, AtpClassifier, AtpType,
                CollectableElement, DataInterface, Identifiable, MultilanguageReferrable,
                PackageableElement, PortInterface, Referrable
 Attribute      Type              Mul. Kind Note
 nvData         VariableDataPr     1..*   aggr The VariableDataPrototype of this nv data
                ototype                           interface.
 Class         NvRequireComSpec
 Package       M2::AUTOSARTemplates::SWComponentTemplate::Communication
 Note          Communication attributes of RPortPrototypes with respect to Nv data communication
               on the required side.
 Base          ARObject, RPortComSpec
 Attribute     Type                Mul. Kind Note
 initValue     ValueSpecificati    0..1  aggr The initial value owned by the NvComSpec
               on
 variable      VariableDataPr        1     ref  The VariableDataPrototype the ComSpec applies
               ototype                          for.
 Class         OperationInvokedEvent
 Package       M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior::RTE
               Events
 Note          The OperationInvokedEvent references the ClientServerOperation invoked by the
               client.
 Base          ARObject, AbstractEvent, AtpClassifier, AtpFeature, AtpStructureElement,
               Identifiable, MultilanguageReferrable, RTEEvent, Referrable
 Attribute     Type                  Mul. Kind Note
 operation     ClientServerOp        0..1  iref   The operation to be executed as the consequence
               eration                            of the event.
 Class         PPortPrototype
 Package       M2::AUTOSARTemplates::SWComponentTemplate::Components
 Note          Component port providing a certain port interface.
 Base          ARObject, AbstractProvidedPortPrototype, AtpBlueprintable, AtpFeature, Atp
               Prototype, Identifiable, MultilanguageReferrable, PortPrototype, Referrable
 Attribute     Type                 Mul. Kind Note
 providedInt   PortInterface          1       tref The interface that this port provides.
 erface
                                                 Stereotypes: isOfType
 Class         PRPortPrototype
 Package       M2::AUTOSARTemplates::SWComponentTemplate::Components
 Note          This kind of PortPrototype can take the role of both a required and a provided
               PortPrototype.
 Base          ARObject, AbstractProvidedPortPrototype, AbstractRequiredPortPrototype, Atp
               Blueprintable, AtpFeature, AtpPrototype, Identifiable, MultilanguageReferrable, Port
               Prototype, Referrable
 Attribute     Type                Mul. Kind Note
 providedR     PortInterface         1     tref   This represents the PortInterface used to type the
 equiredInte                                      PRPortPrototype
 rface
                                                  Stereotypes: isOfType
 Class         ParameterAccess
 Package       M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior::Data
               Elements
 Note          The presence of a ParameterAccess implies that a RunnableEntity needs access to a
               ParameterDataPrototype.
 Base          ARObject, AbstractAccessPoint, AtpClassifier, AtpFeature, AtpStructureElement,
               Identifiable, MultilanguageReferrable, Referrable
 Attribute     Type                  Mul. Kind Note
 accessedP     AutosarParamet         1    aggr Refernce to the accessed calibration parameter.
 arameter      erRef
 swDataDef     SwDataDefProp         0..1  aggr This allows denote instance and access specific
 Props         s                                  properties, mainly input values and common axis.
 Class         ParameterDataPrototype
 Package       M2::AUTOSARTemplates::SWComponentTemplate::Datatype::DataPrototypes
 Note          A parameter element used for parameter interface and internal behavior, supporting
               signal like parameter and characteristic value communication patterns and parameter
               and characteristic value definition.
 Base          ARObject, AtpFeature, AtpPrototype, AutosarDataPrototype, DataPrototype,
               Identifiable, MultilanguageReferrable, Referrable
 Attribute     Type                  Mul. Kind Note
 initValue     ValueSpecificati      0..1  aggr Specifies initial value(s) of the
               on                                   ParameterDataPrototype
 Class        ParameterInterface
 Package      M2::AUTOSARTemplates::SWComponentTemplate::PortInterface
 Note         A parameter interface declares a number of parameter and characteristic values to be
              exchanged between parameter components and software components.
              Tags: atp.recommendedPackage=PortInterfaces
 Base         ARElement, ARObject, AtpBlueprint, AtpBlueprintable, AtpClassifier, AtpType,
              CollectableElement, DataInterface, Identifiable, MultilanguageReferrable,
              PackageableElement, PortInterface, Referrable
 Attribute    Type              Mul. Kind Note
 parameter    ParameterData      1..*   aggr The ParameterDataPrototype of this
              Prototype                         ParameterInterface.
 Class        ParameterProvideComSpec
 Package      M2::AUTOSARTemplates::SWComponentTemplate::Communication
 Note         "Communication" specification that applies to parameters on the provided side of a
              connection.
 Base         ARObject, PPortComSpec
 Attribute    Type             Mul. Kind Note
 initValue    ValueSpecificati  0..1    aggr The initial value applicable for the corresponding
              on                                 ParameterDataPrototype.
 parameter    ParameterData      1        ref    The ParameterDataPrototype to which the
              Prototype                          ParameterComSpec applies.
 Class        ParameterRequireComSpec
 Package      M2::AUTOSARTemplates::SWComponentTemplate::Communication
 Note         "Communication" specification that applies to parameters on the required side of a
              connection.
 Base         ARObject, RPortComSpec
 Attribute    Type             Mul. Kind Note
 initValue    ValueSpecificati  0..1    aggr The initial value applicable for the corresponding
              on                                 ParameterDataPrototype.
 parameter    ParameterData      1        ref    The ParameterDataPrototype to which the
              Prototype                          ParameterRequireComSpec applies.
 Class          ParameterSwComponentType
 Package        M2::AUTOSARTemplates::SWComponentTemplate::Components
 Note           The ParameterSwComponentType defines parameters and characteristic values
                accessible via provided Ports. The provided values are the same for all connected
                SwComponentPrototypes
                Tags: atp.recommendedPackage=SwComponentTypes
 Base           ARElement, ARObject, AtpBlueprint, AtpBlueprintable, AtpClassifier, AtpType,
                CollectableElement, Identifiable, MultilanguageReferrable, PackageableElement,
                Referrable, SwComponentType
 Attribute      Type              Mul. Kind Note
 constantM      ConstantSpecifi      *       ref   Reference to the ConstanSpecificationMapping to
 apping         cationMappingS                     be applied for the particular
                et                                 ParameterSwComponentType
                                                   Stereotypes: atpSplitable
                                                   Tags: atp.Splitkey=constantMapping
 dataTypeM      DataTypeMappi        *      ref    Reference to the DataTypeMapping to be applied
 apping         ngSet                              for the particular ParameterSwComponentType
                                                   Stereotypes: atpSplitable
                                                   Tags: atp.Splitkey=dataTypeMapping
 instantiatio   InstantiationDat     *     aggr    The purpose of this is that within the context of a
 nDataDefP      aDefProps                          given SwComponentType some data def
 rops                                              properties of individual instantiations can be
                                                   modified.
                                                   Stereotypes: atpVariation
                                                   Tags: vh.latestBindingTime=preCompileTime
 Class          PerInstanceMemory
 Package        M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior::Per
                InstanceMemory
 Note           Defines a C typed memory-block that needs to be available for each instance of the
                SW-component. This is typically only useful if supportsMultipleInstantiation is set to
                "true" or if the software-component defines NVRAM access via permanent blocks.
 Base           ARObject, AtpClassifier, AtpFeature, AtpStructureElement, Identifiable,
                MultilanguageReferrable, Referrable
 Attribute      Type                  Mul. Kind Note
 initValue      String                0..1   attr   Specifies initial value(s) of the PerInstanceMemory
 swDataDef      SwDataDefProp         0..1   aggr This represents the ability to to allocate RAM at
 Props          s                                   specific memory sections, for example, to support
                                                    the RAM Block recovery strategy by mapping to
                                                    uninitialized RAM.
 type           CIdentifier             1    attr   The name of the "C"-type
 Class          PortAPIOption
 Package        M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior::PortAPI
                Options
 Note           Options how to generate the signatures of calls for an AtomicSwComponentType in
                order to communicate over a PortPrototype (for calls into a RunnableEntity as well as
                for calls from a RunnableEntity to the PortPrototype).
 Base           ARObject
 Attribute      Type                Mul. Kind Note
 enableTak      Boolean              1     attr      If set to true, the software-component is able to
 eAddress                                            use the API reference for deriving a pointer to an
                                                     object.
 errorHandli    DataTransforma      0..1   attr      This specifies whether the RunnableEntitys which
 ng             tionErrorHandlin                     access a PortPrototype that it referenced by this
                gEnum                                PortAPIOption shall specifically handle
                                                     transformer errors or not.
 indirectAPI    Boolean              1     attr      If set to true this attribute specifies an "indirect
                                                     API" to be generated for the associated port which
                                                     means that the SWC is able to access the actions
                                                     on a port via a pointer to an object representing a
                                                     port. This allows e.g. iterating over ports in a loop.
                                                     This option has no effect for PPortPrototypes of
                                                     client/server interfaces.
 port           PortPrototype        1      ref      The option is valid for generated functions related
                                                     to communication over this port
 portAr         PortDefinedArg       *     aggr An argument value defined by this port.
 gValue         umentValue
 (ordered)
 supported      SwcSupportedF         *      aggr    This collection specifies which features are
 Feature        eature                               supported by the RunnableEntitys which access a
                                                     PortPrototype that it referenced by this
                                                     PortAPIOption.
 Class          PortDefinedArgumentValue
 Package        M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior::PortAPI
                Options
 Note           A PortDefinedArgumentValue is passed to a RunnableEntity dealing with the
                ClientServerOperations provided by a given PortPrototype. Note that this is restricted
                to PPortPrototypes of a ClientServerInterface.
 Base           ARObject
 Attribute      Type               Mul. Kind Note
 value          ValueSpecificati     1      aggr Specifies the actual value.
                on
Stereotypes: isOfType
 Class         PostBuildVariantCondition
 Package       M2::AUTOSARTemplates::GenericStructure::VariantHandling
 Note          This class specifies the value which must be assigned to a particular variant criterion
               in order to bind the variation point. If multiple criterion/value pairs are specified, they
               shall all match to bind the variation point.
 Base          ARObject
 Attribute     Type                 Mul.    Kind    Note
 matchingC     PostBuildVarian       1       ref    This is the criterion which needs to match the
 riterion      tCriterion                           value in order to make the
                                                    PostbuildVariantCondition to be true.
                                                   Stereotypes: atpVariation
                                                   Tags: vh.latestBindingTime=preCompileTime
 Class         PostBuildVariantCriterion
 Package       M2::AUTOSARTemplates::GenericStructure::VariantHandling
 Note          This class specifies one particular PostBuildVariantSelector.
               Tags: atp.recommendedPackage=PostBuildVariantCriterions
 Base          ARElement, ARObject, AtpDefinition, CollectableElement, Identifiable, Multilanguage
               Referrable, PackageableElement, Referrable
 Attribute     Type              Mul. Kind Note
 compuMet      CompuMethod         1     ref    The compuMethod specifies the possible values
 hod                                            for the variant criterion serving as an enumerator.
 Class         PostBuildVariantCriterionValue
 Package       M2::AUTOSARTemplates::GenericStructure::VariantHandling
 Note          This class specifies a the value which must be assigned to a particular variant
               criterion in order to bind the variation point. If multiple criterion/value pairs are
               specified, they all must must match to bind the variation point.
 Base          ARObject
 Attribute     Type                  Mul. Kind Note
 annotation    Annotation              *     aggr This provides the ability to add information why
                                                      the value is set like it is.
                                                   Tags: xml.sequenceOffset=30
 value         Integer              1       attr   This is the particular value of the post-build variant
                                                   criterion.
                                                   Stereotypes: atpVariation
                                                   Tags: vh.latestBindingTime=preCompileTime
                                                   xml.sequenceOffset=20
 variantCrit   PostBuildVarian      1       ref    This association selects the variant criterion
 erion         tCriterion                          whose value is specified.
Tags: xml.sequenceOffset=10
 Class          PostBuildVariantCriterionValueSet
 Package        M2::AUTOSARTemplates::GenericStructure::VariantHandling
 Note           This meta-class represents the ability to denote one set of
                postBuildVariantCriterionValues.
                Tags: atp.recommendedPackage=PostBuildVariantCriterionValueSets
 Base           ARElement, ARObject, CollectableElement, Identifiable, MultilanguageReferrable,
                PackageableElement, Referrable
 Attribute      Type             Mul. Kind Note
 postBuildV     PostBuildVarian   *      aggr This is is one particular postbuild variant
 ariantCriter   tCriterionValue                 criterion/value pair being part of the
 ionValue                                       PostBuildVariantSet.
 Class          PredefinedVariant
 Package        M2::AUTOSARTemplates::GenericStructure::VariantHandling
 Note           This specifies one predefined variant. It is characterized by the union of all system
                constant values and post-build variant criterion values aggregated within all
                referenced system constant value sets and post build variant criterion value sets plus
                the value sets of the included variants.
                Tags: atp.recommendedPackage=PredefinedVariants
 Base           ARElement, ARObject, CollectableElement, Identifiable, MultilanguageReferrable,
                PackageableElement, Referrable
 Attribute      Type             Mul. Kind Note
 includedVa     PredefinedVaria   *       ref   The associated variants are considered part of
 riant          nt                              this PredefinedVariant. This means the settings of
                                                the included variants are included in the settings
                                                of the referencing PredefinedVariant.
                                                Nevertheless the included variants might be
                                                included in several predefined variants.
 postBuildV     PostBuildVarian   *       ref   This is the postBuildVariantCriterionValueSet
 ariantCriter   tCriterionValueS                contributing to the predefinded variant.
 ionValueS      et
 et
 swSystem       SwSystemconst        *      ref    This ist the set of Systemconstant Values
 constantVa     antValueSet                        contributing to the predefined variant.
 lueSet
 Class          QueuedReceiverComSpec
 Package        M2::AUTOSARTemplates::SWComponentTemplate::Communication
 Note           Communication attributes specific to queued receiving.
 Base           ARObject, RPortComSpec, ReceiverComSpec
 Attribute      Type              Mul. Kind Note
 queueLeng      PositiveInteger     1      attr    Length of queue for received events.
 th
 Class         QueuedSenderComSpec
 Package       M2::AUTOSARTemplates::SWComponentTemplate::Communication
 Note          Communication attributes specific to distribution of events (PPortPrototype,
               SenderReceiverInterface and dataElement carries an "event").
 Base          ARObject, PPortComSpec, SenderComSpec
 Attribute     Type              Mul. Kind Note
                                              
 Class         RPortPrototype
 Package       M2::AUTOSARTemplates::SWComponentTemplate::Components
 Note          Component port requiring a certain port interface.
 Base          ARObject, AbstractRequiredPortPrototype, AtpBlueprintable, AtpFeature, Atp
               Prototype, Identifiable, MultilanguageReferrable, PortPrototype, Referrable
 Attribute     Type                 Mul. Kind Note
 requiredInt   PortInterface          1       tref The interface that this port requires, i.e. the port
 erface                                            depends on another port providing the specified
                                                   interface.
Stereotypes: isOfType
 Class         RapidPrototypingScenario
 Package       M2::AUTOSARTemplates::SWComponentTemplate::RPTScenario
 Note          This meta class provides the ability to describe a Rapid Prototyping Scenario. Such a
               Rapid Prototyping Scenario consist out of two main aspects, the description of the
               byPassPoints and the relation to an rptHook.
               Tags: atp.recommendedPackage=RapidPrototypingScenarios
 Base          ARElement, ARObject, CollectableElement, Identifiable, MultilanguageReferrable,
               PackageableElement, Referrable
 Attribute     Type             Mul. Kind Note
 hostSyste     System            1       ref   System which describes the software components
 m                                             of the host ECU.
 rptContain    RptContainer     1..*    aggr Top-level rptContainer definitions of this specific
 er                                            rapid prototyping scenario.
                                                  Stereotypes: atpSplitable
                                                  Tags: atp.Splitkey=shortName
 rptSystem     System             0..1     ref    System which describes the rapid prototyping
                                                  algorithm in the format of AUTOSAR Software
                                                  Components.
                                                  Stereotypes: atpSplitable
                                                  Tags: atp.Splitkey=rptSystem
                                                  Stereotypes: atpVariation
                                                  Tags: vh.latestBindingTime=preCompileTime
 maxNoNe       PositiveInteger     0..1   attr    The maximum amount of missing or repeated
 wOrRepea                                         Data which the receiver does not expect to exceed
 tedData                                          under normal communication conditions.
 networkRe     SwDataDefProp       0..1   aggr    A networkRepresentation is used to define how
 presentatio   s                                  the dataElement is mapped to a communication
 n                                                bus.
 replaceWit    VariableAccess      0..1   aggr    This aggregation is used to identify the
 h                                                AutosarDataPrototype to be taken for sourcing an
                                                  external replacement in the out-of-range handling.
 syncCount     PositiveInteger     0..1   attr    Number of Data required for validating the
 erInit                                           consistency of the counter that shall be received
                                                  with a valid counter (i.e. counter within the allowed
                                                  lock-in range) after the detection of an unexpected
                                                  behavior of a received counter.
 transforma    Transformation       *     aggr    This references the
 tionComSp     ComSpecProps                       TransformationComSpecProps which define
 ecProps                                          port-specific configuration for data transformation.
 usesEndT      Boolean             0..1   attr    This indicates whether the corresponding
 oEndProte                                        dataElement shall be transmitted using end-to-end
 ction                                            protection.
                                                  Stereotypes: atpVariation
                                                  Tags: vh.latestBindingTime=preCompileTime
 Class        ReferenceValueSpecification
 Package      M2::AUTOSARTemplates::CommonStructure::Constants
 Note         Specifies a reference to a data prototype to be used as an initial value for a pointer in
              the software.
 Base         ARObject, ValueSpecification
 Attribute    Type                Mul. Kind Note
 referenceV   DataPrototype        1       ref    The referenced data prototype.
 alue
                                                   Tags: xml.enforceMinMultiplicity=true;
                                                   xml.sequenceOffset=-100
 shortName    ShortNameFrag         *      aggr    This specifies how the Referrable.shortName is
 Fragment     ment                                 composed of several shortNameFragments.
Tags: xml.sequenceOffset=-90
 Primitive    RevisionLabelString
 Package      M2::AUTOSARTemplates::GenericStructure::GeneralTemplateClasses::Primitive
              Types
 Note         This primitive represents a revision label which identifies an engineering object. It
              represents a pattern which
                   requires three integers representing from left to right MajorVersion,
                    MinorVersion, PatchVersion.
                   may add an application specific suffix separated by one of ".", "_", ";".
              Tags: xml.xsd.customType=REVISION-LABEL-STRING;
              xml.xsd.pattern=[0-9]+\.[0-9]+\.[0-9]+([\._;].*)?; xml.xsd.type=string
 Class         RoleBasedPortAssignment
 Package       M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior::Service
               Mapping
 Note          This class specifies an assignment of a role to a particular service port
               (RPortPrototype or PPortPrototype) of an AtomicSwComponentType. With this
               assignment, the role of the service port can be mapped to a specific ServiceNeeds
               element, so that a tool is able to create the correct connector.
 Base          ARObject
 Attribute     Type                Mul. Kind Note
 portPrototy   PortPrototype         1       ref     Service PortPrototype used in the assigned role.
 pe                                                  This PortPrototype shall either belong to the same
                                                     AtomicSwComponentType as the
                                                     SwcInternalBehavior which owns the
                                                     ServiceDependency or to the same
                                                     NvBlockSwComponentType as the
                                                     NvBlockDescriptor.
 role          Identifier            1       attr    This is the role of the assigned Port in the given
                                                     context.
 Class         RootSwCompositionPrototype
 Package       M2::AUTOSARTemplates::SystemTemplate
 Note          The RootSwCompositionPrototype represents the top-level-composition of software
               components within a given System. According to the use case of the System, this
               may for example be the a more or less complete VFB description, the software of a
               System Extract or the software of a flat ECU Extract with only atomic SWCs.
               Therefore the RootSwComposition will only occasionally contain all atomic software
               components that are used in a complete VFB System. The OEM is primarily
               interested in the required functionality and the interfaces defining the integration of
               the Software Component into the System. The internal structure of such a component
               contains often substantial intellectual property of a supplier. Therefore a top-level
               software composition will often contain empty compositions which represent
               subsystems.
                                                   Stereotypes: atpSplitable
                                                   Tags: atp.Splitkey=flatMap
 softwareC     CompositionSw        1       tref   We assume that there is exactly one top-level
 omposition    ComponentTyp                        composition that includes all Component
               e                                   instances of the system
Stereotypes: isOfType
 Enumeration     RptAccessEnum
 Package         M2::AUTOSARTemplates::CommonStructure::MeasurementCalibrationSupport::
                 RptSupport
 Note            Determines the access rights to a data object with respect to rapid prototyping.
 Literal         Description
 enabled         The related data element is accessible by RP tool.
                 Tags: atp.EnumerationValue=0
 none            The related data element is not accessible by RP tool.
                 Tags: atp.EnumerationValue=1
 protected       The data element is known to the RP tool however its usage for RP can be
                 restricted. Use case: limitation based on access rights
Tags: atp.EnumerationValue=2
 Class         RptContainer
 Package       M2::AUTOSARTemplates::SWComponentTemplate::RPTScenario
 Note          This meta class defines a byPassPoint and the relation to a rptHook.
               Additionally it may contain further rptContainers if the byPassPoint is not atomic. For
               example a byPassPoint refereing to a RunnableEntity may contain rptContainers
               referring to the data access points of the RunnableEntity.
                                                 Tags: atp.Splitkey=explicitRptProfileSelection
 rptContain    RptContainer        *     aggr    Sub-level rptContainer definitions of this specific
 er                                              rapid prototyping scenario.
 Enumeration     RptEnablerImplTypeEnum
 Package         M2::AUTOSARTemplates::CommonStructure::MeasurementCalibrationSupport::
                 RptSupport
 Note            Describes the required / implemented usage of enabler flags for data access in the
                 code.
 Literal         Description
                 Tags: atp.EnumerationValue=0
 rptEnabler      "RP enabler" is implemented as a RAM variable
 Ram
                 Tags: atp.EnumerationValue=1
 rptEnabler      The RTE generator implements both the RAM and ROM "RP enabler".
 RamAndRom
                 Tags: atp.EnumerationValue=3
 rptEnabler      "RP enabler" is implemented as a calibrateable ROM variable.
 Rom
                 Tags: atp.EnumerationValue=2
 Class         RptExecutableEntityEvent
 Package       M2::AUTOSARTemplates::CommonStructure::MeasurementCalibrationSupport::Rpt
               Support
 Note          This describes a ExecutableEntity event instance which can be bypassed.
 Base          ARObject, Identifiable, MultilanguageReferrable, Referrable
 Attribute     Type                Mul. Kind Note
 executionC    RptExecutionCo      1..*      ref  This describes the context in which the event of
 ontext        ntext                              the executable entity is executed.
 mcDataAs      RoleBasedMcD          *     aggr Reference to related McDataElements describing
 signment      ataAssignment                      the implementation of ?RP runnable disabler flag"
                                                  and "stimulation enabler flag"
 rptEventId    PositiveInteger      1     attr   RPT event id used for service points call.
 rptExecuta    RptExecutableE       1     aggr   Describes the implemented code preparation for
 bleEntityPr   ntityProperties                   rapid prototyping at ExecutableEntity invocation.
 operties
 rptImplPoli   RptImplPolicy      0..1    aggr   Describes the RptImplPolicy of a
 cy                                              RptExecutableEvent for service based bypassing.
 rptService    RptServicePoint    1..*     ref   This describes the applicable Post Service Points
 PointPost                                       for a RTEEvent / BswEvent of a bypassed
                                                 ExecutableEntity.
 rptService    RptServicePoint    1..*     ref   This describes the applicable Pre Service Points
 PointPre                                        for a RTEEvent / BswEvent of a bypassed
                                                 ExecutableEntity.
 Class         RptExecutableEntityProperties
 Package       M2::AUTOSARTemplates::SWComponentTemplate::RPTScenario
 Note          Describes the code preparation for rapid prototyping at ExecutableEntity invocation.
 Base          ARObject
 Attribute     Type              Mul. Kind Note
 maxRptEv      PositiveInteger     1      attr    Highest RPT event id useable for RTE generated
 entId                                            service points. This attribute is relevant, if
                                                  dedicated id range shall be applied to the
                                                  ExecutableEntitys of a software component or
                                                  specific ExecutableEntitys.
 minRptEve     PositiveInteger     1      attr    Lowest RPT event id useable for RTE generated
 ntId                                             service points. This attribute is relevant, if
                                                  dedicated id range shall be applied to the
                                                  ExecutableEntitys of a software component or
                                                  specific ExecutableEntitys.
 rptExecutio   RptExecutionCo      1      attr    This attribute specifies the rapid prototyping
 nControl      ntrolEnum                          control of the executable
 rptService    RptServicePoint     1      attr    Enables generation of service points by the RTE
 Point         Enum                               generator.
 Enumeration     RptExecutionControlEnum
 Package         M2::AUTOSARTemplates::CommonStructure::MeasurementCalibrationSupport::
                 RptSupport
 Note            Determines rapid prototyping preparation of a ExecutableEntity.
 Literal         Description
 conditional     The ExecutableEntity is only executed when the rapid prototyping disable flag is
                 NOT set.
                 Tags: atp.EnumerationValue=0
 none            The ExecutableEntity is executed without specific rapid prototyping condition.
Tags: atp.EnumerationValue=1
 Class         RptImplPolicy
 Package       M2::AUTOSARTemplates::SWComponentTemplate::RPTScenario
 Note          Describes the code preparation for rapid prototyping at data accesses.
 Base          ARObject
 Attribute     Type              Mul. Kind Note
 rptEnablerI   RptEnablerImpl      1      attr    For Level 2 or Level3 this property determines
 mplType       TypeEnum                           how the RTE implements the additional ?RP
                                                  enabler" flag.
 rptPreparat   RptPreparation      1      attr    Mandates RP preparation level for access to
 ionLevel      Enum                               VariableDataPrototype within generated RTE
                                                  implementation.
 Enumeration     RptPreparationEnum
 Package         M2::AUTOSARTemplates::CommonStructure::MeasurementCalibrationSupport::
                 RptSupport
 Note            Determines the RP preparation level for access to VariableDataPrototypes within
                 the generated RTE implementation.
 Literal         Description
 none            No RP preparation for VariableDataPrototype.
                 Tags: atp.EnumerationValue=0
 rptLevel1       The RTE implementation uses an ?RP global buffer" for measurement and
                 post-build hooking purposes.
                 Tags: atp.EnumerationValue=1
 rptLevel2       As rpLevel1 but the RTE implementation also uses both ?RP enabler flag" to
                 permit RP overwrite at run-time.
                 Tags: atp.EnumerationValue=2
 rptLevel3       As rpLevel2 but the RTE implementation also uses "RP global measurement
                 buffer" to record the original ECU-generated value in addition to the RP value.
Tags: atp.EnumerationValue=3
 Class         RptProfile
 Package       M2::AUTOSARTemplates::SWComponentTemplate::RPTScenario
 Note          The RptProfile describes the common properties of a Rapid Prototyping method.
 Base          ARObject, Identifiable, MultilanguageReferrable, Referrable
 Attribute     Type                Mul. Kind Note
 maxServic     PositiveInteger       1       attr Highest service point id useable for RTE
 ePointId                                         generated service points.
 minService    PositiveInteger       1       attr Lowest service point id useable for RTE generated
 PointId                                          service points.
 servicePoi    CIdentifier           1       attr Complete symbol of the function implementing the
 ntSymbolP                                        post service point. This symbol is used for
 ost                                              post-build hooking purposes.
 servicePoi    CIdentifier           1       attr Complete symbol of the function implementing the
 ntSymbolP                                        pre service point. This symbol is used for
 re                                               post-build hooking purposes.
 stimEnable    RptEnablerImpl        1       attr Defines if the service points support the
 r             TypeEnum                           stimulation enabler. If RptProfile.stimEnabler is
                                                  "none" then no stimulation enabler is passed to
                                                  the service function. Otherwise the stimulation
                                                  enabler will be passed as a parameter.
 Class        RptSupportData
 Package      M2::AUTOSARTemplates::CommonStructure::MeasurementCalibrationSupport::Rpt
              Support
 Note         Root element for rapid prototyping support data related to one Implementation artifact
              on an ECU, in particular the RTE. The rapid prototyping support data may reference
              to elements provided for McSupportData.
 Base         ARObject
 Attribute    Type               Mul. Kind Note
 executionC   RptExecutionCo      1..*    aggr Defines a environment for the execution of
 ontext       ntext                              ExecutableEntites. Blah
 rptCompon    RptComponent        1..*    aggr Description of components for which rapid
 ent                                             prototyping support is implemented.
                                                  Stereotypes: atpVariation
                                                  Tags: vh.latestBindingTime=preCompileTime
 rptService   RptServicePoint     1..*    aggr    Stereotypes: atpVariationTags: vh.latestBinding
 Point                                            Time=preCompileTime
 Class        RptSwPrototypingAccess
 Package      M2::AUTOSARTemplates::CommonStructure::MeasurementCalibrationSupport::Rpt
              Support
 Note         Describes the accessibility of data and modes by the rapid prototyping tooling.
 Base         ARObject
 Attribute    Type              Mul. Kind Note
 rptHookAc    RptAccessEnu        1        attr   The related data element can be modified using a
 cess         m                                   post-build hooking tool. An ENABLED
                                                  VariableDataPrototype is implicitly
                                                  READABLE/WRITABLE.
 rptReadAc    RptAccessEnu        1        attr   The related data element can be used as input for
 cess         m                                   bypass functionality by RP tool. If rptImplPolicy is
                                                  not specified then RTE generation must ensure at
                                                  least suitable MC read points are created.
 rptWriteAc   RptAccessEnu        1        attr   The related data element can be used as output
 cess         m                                   for bypass functionality by RP tool. The data
                                                  element must be prepared to rptLevel2 and
                                                  related write service points are present.
 Class        RuleBasedValueSpecification
 Package      M2::AUTOSARTemplates::CommonStructure::Constants
 Note         This meta-class is used to support a rule-based initialization approach for data types
              with an array-nature (ApplicationArrayDataType and ImplementationDataType of
              category ARRAY) or a compound ApplicationPrimitiveDataType (which also boils
              down to an array-nature).
 Base         ARObject
 Attribute    Type                Mul. Kind Note
                                                 Stereotypes: atpVariation
                                                 Tags: vh.latestBindingTime=preCompileTime
                                                 xml.sequenceOffset=30
 maxSizeTo    Integer             0..1    attr   If a rule is chosen which does not fill until the end,
 Fill                                            this determines until which size the rule shall fill
                                                 the values.
                                                 Tags: xml.sequenceOffset=40
 rule         Identifier           1      attr   This denotes the name of the rule of the
                                                 RuleBasedValueSpecification. The rule
                                                 determines the calculation specification according
                                                 which the arguments are used to calculated the
                                                 values.
Tags: xml.sequenceOffset=20
 Class        RunnableEntity
 Package      M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior
 Note         A RunnableEntity represents the smallest code-fragment that is provided by an
              AtomicSwComponentType and are executed under control of the RTE.
              RunnableEntities are for instance set up to respond to data reception or operation
              invocation on a server.
 Base         ARObject, AtpClassifier, AtpFeature, AtpStructureElement, ExecutableEntity,
              Identifiable, MultilanguageReferrable, Referrable
 Attribute    Type                  Mul. Kind Note
 argument     RunnableEntity         *    aggr This represents the formal definition of a an
 (ordered)    Argument                           argument to a RunnableEntity.
 asynchron    AsynchronousS          *    aggr The server call result point admits a runnable to
 ousServer    erverCallResult                    fetch the result of an asynchronous server call.
 CallResult   Point
 Point                                           The aggregation of
                                                 AsynchronousServerCallResultPoint is subject to
                                                 variability with the purpose to support the
                                                 conditional existence of client server
                                                 PortPrototypes and the variant existence of server
                                                 call result points in the implementation.
                                              Stereotypes: atpVariation
                                              Tags: atp.Splitkey=shortName, variation
                                              Point.shortLabel
                                              vh.latestBindingTime=preCompileTime
 Class        RunnableEntityArgument
 Package      M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior::Runnable
              Entity
 Note         This meta-class represents the ability to provide specific information regarding the
              arguments to a RunnableEntity.
 Base         ARObject
 Attribute    Type               Mul. Kind Note
 symbol       CIdentifier          1      attr   This represents the symbol to be generated into
                                                 the actual signature on the level of the C
                                                 programming language.
 Class        RunnableEntityGroup
 Package      M2::AUTOSARTemplates::SWComponentTemplate::ImplicitCommunicationBehavior
 Note         This meta-class represents the ability to define a collection of RunnableEntities. The
              collection can be nested.
 Base         ARObject, AtpClassifier, AtpFeature, AtpStructureElement, Identifiable,
              MultilanguageReferrable, Referrable
 Attribute    Type                Mul. Kind Note
 runnableE    RunnableEntity       *      iref   This represents a collection of RunnableEntitys
 ntity                                           that belong to the enclosing RunnableEntityGroup.
                                                  Stereotypes: atpVariation
                                                  Tags: vh.latestBindingTime=preCompileTime
 runnableE    RunnableEntity        *      iref   This represents the ability to define nested groups
 ntityGroup   Group                               of RunnableEntitys.
                                                  Stereotypes: atpVariation
                                                  Tags: vh.latestBindingTime=preCompileTime
 Class        Sdg
 Package      M2::MSR::AsamHdo::SpecialData
 Note         Sdg (SpecialDataGroup) is a generic model which can be used to keep arbitrary
              information which is not explicitly modeled in the meta-model.
              Sdg can have various contents as defined by sdgContentsType. Special Data should
              only be used moderately since all elements should be defined in the meta-model.
                                                 Tags: xml.attribute=true
 sdgCaptio    SdgCaption         0..1    aggr    This aggregation allows to assign the properties of
 n                                               Identifiable to the sdg. By this, a shortName etc.
                                                 can be assigned to the Sdg.
                                                 Tags: xml.sequenceOffset=20
 sdgCaptio    SdgCaption         0..1     ref    This association allows to reuse an already
 nRef                                            existing caption.
                                                 Tags: xml.name=SDG-CAPTION-REF;
                                                 xml.sequenceOffset=25
 sdgConten    SdgContents        0..1    aggr    This is the content of the Sdg.
 tsType
                                                 Tags: xml.roleElement=false; xml.roleWrapper
                                                 Element=false; xml.sequenceOffset=30; xml.type
                                                 Element=false; xml.typeWrapperElement=false
 Class        ScaleConstr
 Package      M2::MSR::AsamHdo::Constraints::GlobalConstraints
 Note         This meta-class represents the ability to specify constraints as a list of intervals
              (called scales).
 Base         ARObject
 Attribute    Type               Mul. Kind Note
 desc         MultiLanguage      0..1    aggr <desc> represents a general but brief description
              OverviewParagr                     of the object in question.
              aph
                                                 Tags: xml.sequenceOffset=30
 lowerLimit   Limit              0..1     attr   This specifies the lower limit of the scale.
                                                 Stereotypes: atpVariation
                                                 Tags: vh.latestBindingTime=preCompileTime
                                                 xml.sequenceOffset=40
 shortLabel   Identifier         0..1     attr   This element specifies a short name for the
                                                 scaleConstr. This can for example be used to
                                                 create more specific messages of a constraint
                                                 checker. The constraints cannot be associated in
                                                 the meta-model, therefore shortLabel is somehow
                                                 a substitute for shortName.
Tags: xml.sequenceOffset=20
                                                  Stereotypes: atpVariation
                                                  Tags: vh.latestBindingTime=preCompileTime
                                                  xml.sequenceOffset=50
 validity      ScaleConstrVali     0..1    attr   Specifies if the values defined by the scales are
               dityEnum                           considered to be valid. If the attribute is missing
                                                  then the default value is "VALID".
Tags: xml.attribute=true
 Class         SectionNamePrefix
 Package       M2::AUTOSARTemplates::CommonStructure::ResourceConsumption::Memory
               SectionUsage
 Note          A prefix to be used for generated code artifacts defining a memory section name in
               the source code of the using module.
 Base          ARObject, ImplementationProps, Referrable
 Attribute     Type                Mul. Kind Note
 implement     DependencyOn         0..1    ref   Optional reference that allows to Indicate the code
 edIn          Artifact                           artifact (header file) containing the preprocessor
                                                  implementation of memory sections with this
                                                  prefix.
                                                  Stereotypes: atpVariation
                                                  Tags: vh.latestBindingTime=preCompileTime
 Class          SenderReceiverInterface
 Package        M2::AUTOSARTemplates::SWComponentTemplate::PortInterface
 Note           A sender/receiver interface declares a number of data elements to be sent and
                received.
                Tags: atp.recommendedPackage=PortInterfaces
 Base           ARElement, ARObject, AtpBlueprint, AtpBlueprintable, AtpClassifier, AtpType,
                CollectableElement, DataInterface, Identifiable, MultilanguageReferrable,
                PackageableElement, PortInterface, Referrable
 Attribute      Type              Mul. Kind Note
 dataEleme      VariableDataPr     1..*   aggr The data elements of this
 nt             ototype                           SenderReceiverInterface.
 invalidation   InvalidationPolic   *     aggr InvalidationPolicy for a particular dataElement
 Policy         y
 Class          SenderReceiverToSignalGroupMapping
 Package        M2::AUTOSARTemplates::SystemTemplate::DataMapping
 Note           Mapping of a sender receiver communication data element with a composite datatype
                to a signal group.
 Base           ARObject, DataMapping
 Attribute      Type               Mul. Kind Note
 dataEleme      VariableDataPr      1      iref  Reference to a data element with a composite
 nt             ototype                          datatype which is mapped to a signal group.
 signalGrou     SystemSignalGr      1       ref  Reference to the signal group, which contain all
 p              oup                              primitive datatypes of the composite type
 typeMappi      SenderRecCom        1     aggr The CompositeTypeMapping maps the the
 ng             positeTypeMap                    ApplicationArrayElements and
                ping                             ApplicationRecordElements to Signals of the
                                                 SignalGroup.
 Class         SenderReceiverToSignalMapping
 Package       M2::AUTOSARTemplates::SystemTemplate::DataMapping
 Note          Mapping of a sender receiver communication data element to a signal.
 Base          ARObject, DataMapping
 Attribute     Type              Mul. Kind Note
 dataEleme     VariableDataPr      1      iref  Reference to the data element.
 nt            ototype
 systemSig     SystemSignal        1       ref  Reference to the system signal used to carry the
 nal                                            data element.
 Class         SensorActuatorSwComponentType
 Package       M2::AUTOSARTemplates::SWComponentTemplate::Components
 Note          The SensorActuatorSwComponentType introduces the possibility to link from the
               software representation of a sensor/actuator to its hardware description provided by
               the ECU Resource Template.
               Tags: atp.recommendedPackage=SwComponentTypes
 Base          ARElement, ARObject, AtomicSwComponentType, AtpBlueprint, AtpBlueprintable,
               AtpClassifier, AtpType, CollectableElement, Identifiable, MultilanguageReferrable,
               PackageableElement, Referrable, SwComponentType
 Attribute     Type                Mul. Kind Note
 sensorActu    HwDescriptionE       1       ref   Reference from the Sensor Actuator Software
 ator          ntity                              Component Type to the description of the actual
                                                  hardware.
 Enumeration     ServerArgumentImplPolicyEnum
 Package         M2::AUTOSARTemplates::SWComponentTemplate::PortInterface
 Note            This defines how the argument type of the servers RunnableEntity is implemented.
 Literal         Description
 useArgument     The argument type of the RunnableEntity is derived from the AutosarDataType of
 Type            the ArgumentPrototype.
                 Tags: atp.EnumerationValue=0
 useArray        The argument type of the RunnableEntity is derived from the AutosarDataType of
 BaseType        the elements of the array that corresponds to the ArgumentPrototype. This
                 represents the base type of the array in C.
                 Tags: atp.EnumerationValue=1
 useVoid         The argument type of the RunnableEntity is void.
Tags: atp.EnumerationValue=2
 Class        ServerComSpec
 Package      M2::AUTOSARTemplates::SWComponentTemplate::Communication
 Note         Communication attributes for a server port (PPortPrototype and
              ClientServerInterface).
 Base         ARObject, PPortComSpec
 Attribute    Type                Mul. Kind Note
 operation    ClientServerOp       1      ref    Operation these communication attributes apply
              eration                            to.
 queueLeng    PositiveInteger      1     attr    Length of call queue on the server side. The
 th                                              queue is implemented by the RTE. The value shall
                                                 be greater or equal to 1. Setting the value of
                                                 queueLength to 1 implies that incoming requests
                                                 are rejected while another request that arrived
                                                 earlier is being processed.
 transforma   Transformation       *     aggr This references the
 tionComSp    ComSpecProps                       TransformationComSpecProps which define
 ecProps                                         port-specific configuration for data transformation.
 Class        ServiceProxySwComponentType
 Package      M2::AUTOSARTemplates::SWComponentTemplate::Components
 Note         This class provides the ability to express a software-component which provides
              access to an internal service for remote ECUs. It acts as a proxy for the service
              providing access to the service.
              An important use case is the request of vehicle mode switches: Such requests can be
              communicated via sender-receiver interfaces across ECU boundaries, but the mode
              manager being responsible to perform the mode switches is an AUTOSAR Service
              which is located in the Basic Software and is not visible in the VFB view. To handle
              this situation, a ServiceProxySwComponentType will act as proxy for the mode
              manager. It will have R-Ports to be connected with the mode requestors on VFB level
              and Service-Ports to be connected with the local mode manager at ECU integration
              time.
              Tags: atp.recommendedPackage=SwComponentTypes
 Base         ARElement, ARObject, AtomicSwComponentType, AtpBlueprint, AtpBlueprintable,
              AtpClassifier, AtpType, CollectableElement, Identifiable, MultilanguageReferrable,
              PackageableElement, Referrable, SwComponentType
 Attribute    Type                Mul. Kind Note
                                             
 Class        ServiceSwComponentType
 Package      M2::AUTOSARTemplates::SWComponentTemplate::Components
 Note         ServiceSwComponentType is used for configuring services for a given ECU.
              Instances of this class are only to be created in ECU Configuration phase for the
              specific purpose of the service configuration.
              Tags: atp.recommendedPackage=SwComponentTypes
 Base         ARElement, ARObject, AtomicSwComponentType, AtpBlueprint, AtpBlueprintable,
              AtpClassifier, AtpType, CollectableElement, Identifiable, MultilanguageReferrable,
              PackageableElement, Referrable, SwComponentType
 Attribute    Type                Mul. Kind Note
                                             
 Class         SubElementMapping
 Package       M2::AUTOSARTemplates::SWComponentTemplate::PortInterface
 Note          This meta-class allows for the definition of mappings of elements of a composite data
               type.
 Base          ARObject
 Attribute     Type                Mul. Kind Note
 firstElemen   SubElementRef       0..1    aggr This represents the first element referenced in the
 t                                                 scope of the mapping.
                                                  Stereotypes: atpVariation
                                                  Tags: vh.latestBindingTime=preCompileTime
 secondEle     SubElementRef       0..1   aggr    This represents the second element referenced in
 ment                                             the scope of the mapping.
                                                  Stereotypes: atpVariation
                                                  Tags: vh.latestBindingTime=preCompileTime
 textTableM    TextTableMappi      0..2   aggr    This allows for the text-table translation of
 apping        ng                                 individual elements of a composite data type.
 Class         SwAddrMethod
 Package       M2::MSR::DataDictionary::AuxillaryObjects
 Note          Used to assign a common addressing method, e.g. common memory section, to data
               or code objects. These objects could actually live in different modules or components.
               Tags: atp.recommendedPackage=SwAddrMethods
 Base          ARElement, ARObject, AtpBlueprint, AtpBlueprintable, CollectableElement,
               Identifiable, MultilanguageReferrable, PackageableElement, Referrable
 Attribute     Type                  Mul. Kind Note
 memoryAll     MemoryAllocati        0..1  attr   Enumeration to specify the name pattern of the
 ocationKey    onKeywordPolic                     Memory Allocation Keyword.
 wordPolicy    yType
 option        Identifier             *    attr   This attribute introduces the ability to specify
                                                  further intended properties of the MemorySection
                                                  in with the related objects shall be placed.
 Class          SwBaseType
 Package        M2::MSR::AsamHdo::BaseTypes
 Note           This meta-class represents a base type used within ECU software.
                Tags: atp.recommendedPackage=BaseTypes
 Base           ARElement, ARObject, AtpBlueprint, AtpBlueprintable, BaseType, Collectable
                Element, Identifiable, MultilanguageReferrable, PackageableElement, Referrable
 Attribute      Type                Mul. Kind Note
                                                
 Enumeration      SwCalibrationAccessEnum
 Package          M2::MSR::DataDictionary::DataDefProperties
 Note             Determines the access rights to a data object w.r.t. measurement and calibration.
 Literal          Description
 notAccessi-      The element will not be accessible via MCD tools, i.e. will not appear in the ASAP
 ble              file.
                  Tags: atp.EnumerationValue=0
 readOnly         The element will only appear as read-only in an ASAP file.
                  Tags: atp.EnumerationValue=1
 readWrite        The element will appear in the ASAP file with both read and write access.
Tags: atp.EnumerationValue=2
 Class        SwComponentPrototype
 Package      M2::AUTOSARTemplates::SWComponentTemplate::Composition
 Note         Role of a software component within a composition.
 Base         ARObject, AtpFeature, AtpPrototype, Identifiable, MultilanguageReferrable,
              Referrable
 Attribute    Type                Mul. Kind Note
 type         SwComponentT         1    tref    Type of the instance.
              ype
                                                Stereotypes: isOfType
                                                Stereotypes: atpVariation
                                                Tags: vh.latestBindingTime=preCompileTime
 swCompon     SwComponentD       0..1    aggr   This adds a documentation to the
 entDocum     ocumentation                      SwComponentType.
 entation
                                                Stereotypes: atpSplitable; atpVariation
                                                Tags: atp.Splitkey=swComponentDocumentation,
                                                variationPoint.shortLabel
                                                vh.latestBindingTime=preCompileTime
                                                xml.sequenceOffset=-10
               Note that not all of the attributes or associated elements are useful all of the time.
               Hence, the process definition (e.g. expressed with an OCL or a Document Control
               Instance MSR-DCI) has the task of implementing limitations.
               Tags: vh.latestBindingTime=codeGenerationTime
 Base          ARObject
 Attribute     Type               Mul. Kind Note
 additionalN   NativeDeclarati     0..1  attr  This attribute is used to declare native qualifiers of
 ativeType     onString                        the programming language which can neither be
 Qualifier                                     deduced from the baseType (e.g. because the
                                               data object describes a pointer) nor from other
                                               more abstract attributes. Examples are qualifiers
                                               like "volatile", "strict" or "enum" of the C-language.
                                               All such declarations have to be put into one
                                               string.
                                                   Tags: xml.sequenceOffset=235
 annotation    Annotation            *     aggr    This aggregation allows to add annotations (yellow
                                                   pads ...) related to the current data object.
Tags: xml.sequenceOffset=50
                                                Tags: xml.sequenceOffset=180
 dataConstr    DataConstr         0..1   ref    Data constraint for this data object.
                                                Tags: xml.sequenceOffset=190
 displayFor    DisplayFormatS     0..1   attr   This property describes how a number is to be
 mat           tring                            rendered e.g. in documents or in a measurement
                                                and calibration system.
                                                Tags: xml.sequenceOffset=210
 implement     Implementation     0..1   ref    This association denotes the
 ationDataT    DataType                         ImplementationDataType of a data declaration via
 ype                                            its aggregated SwDataDefProps. It is used
                                                whenever a data declaration is not directly
                                                referring to a base type. Especially
                                                     redefinition of an ImplementationDataType
                                                      via a "typedef" to another
                                                      ImplementationDatatype
                                                     the target type of a pointer (see
                                                      SwPointerTargetProps), if it does not refer
                                                      to a base type directly
                                                     the data type of an array or record element
                                                      within an ImplementationDataType, if it
                                                      does not refer to a base type directly
                                                     the data type of an SwServiceArg, if it does
                                                      not refer to a base type directly
                                                Tags: xml.sequenceOffset=215
 invalidValu   ValueSpecificati   0..1   aggr   Optional value to express invalidity of the actual
 e             on                               data element.
                                                Tags: xml.sequenceOffset=255
 stepSize      Float              0..1   attr   This attribute can be used to define a value which
                                                is added to or subtracted from the value of a
                                                DataPrototype when using up/down keys while
                                                calibrating.
 swAddrMet     SwAddrMethod       0..1   ref    Addressing method related to this data object. Via
 hod                                            an association to the same SwAddrMethod it can
                                                be specified that several DataPrototypes shall be
                                                located in the same memory without already
                                                specifying the memory section itself.
Tags: xml.sequenceOffset=30
                                               Tags: xml.sequenceOffset=33
 swBitRepr     SwBitRepresent   0..1   aggr    Description of the binary representation in case of
 esentation    ation                           a bit variable.
                                               Tags: xml.sequenceOffset=60
 swCalibrati   SwCalibrationA   0..1   attr    Specifies the read or write access by MCD tools
 onAccess      ccessEnum                       for this data object.
                                               Tags: xml.sequenceOffset=70
 swCalprm      SwCalprmAxisS    0..1   aggr    This specifies the properties of the axes in case of
 AxisSet       et                              a curve or map etc. This is mainly applicable to
                                               calibration parameters.
                                               Tags: xml.sequenceOffset=90
 swCompari     SwVariableRefP    *     aggr    Variables used for comparison in an MCD
 sonVariabl    roxy                            process.
 e
                                               Tags: xml.sequenceOffset=170; xml.type
                                               Element=false
 swDataDe      SwDataDepend     0..1   aggr    Describes how the value of the data object has to
 pendency      ency                            be calculated from the value of another data
                                               object (by the MCD system).
                                               Tags: xml.sequenceOffset=200
 swHostVar     SwVariableRefP   0..1   aggr    Contains a reference to a variable which serves as
 iable         roxy                            a host-variable for a bit variable. Only applicable
                                               to bit objects.
                                                Tags: xml.sequenceOffset=240
 swInterpol    Identifier        0..1   attr    This is a keyword identifying the mathematical
 ationMetho                                     method to be applied for interpolation. The
 d                                              keyword needs to be related to the interpolation
                                                routine which needs to be invoked.
                                                Tags: xml.sequenceOffset=250
 swIsVirtual   Boolean           0..1   attr    This element distinguishes virtual objects. Virtual
                                                objects do not appear in the memory, their
                                                derivation is much more dependent on other
                                                objects and hence they shall have a
                                                swDataDependency .
                                                Tags: xml.sequenceOffset=260
 swPointerT    SwPointerTarge    0..1   aggr    Specifies that the containing data object is a
 argetProps    tProps                           pointer to another data object.
                                                Tags: xml.sequenceOffset=280
 swRecordL     SwRecordLayo      0..1    ref    Record layout for this data object.
 ayout         ut
                                                Tags: xml.sequenceOffset=290
 swRefresh     Multidimensiona   0..1   aggr    This element specifies the frequency in which the
 Timing        lTime                            object involved shall be or is called or calculated.
                                                This timing can be collected from the task in which
                                                write access processes to the variable run. But
                                                this cannot be done by the MCD system.
Tags: xml.sequenceOffset=300
                                                   Tags: xml.sequenceOffset=120
 swValueBl     Numerical           0..1     attr   This represents the size of a Value Block
 ockSize
                                                   Stereotypes: atpVariation
                                                   Tags: vh.latestBindingTime=preCompileTime
                                                   xml.sequenceOffset=80
 unit          Unit                0..1     ref    Physical unit associated with the semantics of this
                                                   data object. This attribute applies if no
                                                   compuMethod is specified. If both units (this as
                                                   well as via compuMethod) are specified the units
                                                   shall be compatible.
                                                   Tags: xml.sequenceOffset=350
 valueAxisD    ApplicationPrimi    0..1     ref    The referenced ApplicationPrimitiveDataType
 ataType       tiveDataType                        represents the primitive data type of the value axis
                                                   within a compound primitive (e.g. curve, map). It
                                                   supersedes CompuMethod, Unit, and BaseType.
Tags: xml.sequenceOffset=355
 Enumeration     SwImplPolicyEnum
 Package         M2::MSR::DataDictionary::DataDefProperties
 Note            Specifies the implementation strategy with respect to consistency mechanisms of
                 variables.
 Literal         Description
 const           forced implementation such that the running software within the ECU shall not
                 modify it. For example implemented with the "const" modifier in C. This can be
                 applied for parameters (not for those in NVRAM) as well as argument data
                 prototypes.
                 Tags: atp.EnumerationValue=0
 fixed           This data element is fixed. In particular this indicates, that it might also be
                 implemented e.g. as in place data, (#DEFINE).
                 Tags: atp.EnumerationValue=1
 measurement     The data element is created for measurement purposes only. The data element is
 Point           never read directly within the ECU software. In contrast to a "standard" data
                 element in an unconnected provide port is, this unconnection is guaranteed for
                 measurementPoint data elements.
                 Tags: atp.EnumerationValue=2
 queued          The content of the data element is queued and the data element has event
                 semantics, i.e. data elements are stored in a queue and all data elements are
                 processed in first in first out order. The queuing is intended to be implemented by
                 RTE Generator. This value is not applicable for parameters.
Tags: atp.EnumerationValue=3
 standard         This is applicable for all kinds of data elements. For variable data prototypes the
                  last is best semantics applies. For parameter there is no specific implementation
                  directive.
Tags: atp.EnumerationValue=4
 Class         SwPointerTargetProps
 Package       M2::MSR::DataDictionary::DataDefProperties
 Note          This element defines, that the data object (which is specified by the aggregating
               element) contains a reference to another data object or to a function in the CPU code.
               This corresponds to a pointer in the C-language.
               The attributes of this element describe the category and the detailed properties of the
               target which is either a data description or a function signature.
 Base          ARObject
 Attribute     Type                 Mul. Kind Note
 functionPoi   BswModuleEntr         0..1    ref    The referenced BswModuleEntry serves as the
 nterSignat    y                                    signature of a function pointer definition. Primary
 ure                                                use case: function pointer passed as argument to
                                                    other function.
                                                   Tags: xml.sequenceOffset=40
 swDataDef     SwDataDefProp       0..1    aggr    The properties of the target data type.
 Props         s
                                                   Tags: xml.sequenceOffset=30
 targetCate    Identifier          0..1     attr   This specifies the category of the target:
 gory
                                                        In case of a data pointer, it shall specify the
                                                         category of the referenced data.
                                                        In case of a function pointer, it could be
                                                         used to denote the category of the
                                                         referenced BswModuleEntry. Since
                                                         currently no categories for BswModuleEntry
                                                         are defined it will be empty.
Tags: xml.sequenceOffset=5
 Class        SwRecordLayout
 Package      M2::MSR::DataDictionary::RecordLayout
 Note         Defines how the data objects (variables, calibration parameters etc.) are to be stored
              in the ECU memory. As an example, this definition specifies the sequence of axis
              points in the ECU memory. Iterations through axis values are stored within the
              sub-elements swRecordLayoutGroup.
              Tags: atp.recommendedPackage=SwRecordLayouts
 Base         ARElement, ARObject, CollectableElement, Identifiable, MultilanguageReferrable,
              PackageableElement, Referrable
 Attribute    Type             Mul. Kind Note
 swRecordL    SwRecordLayo      1      aggr This is the top level record layout group.
 ayoutGrou    utGroup
 p                                            Tags: xml.roleElement=true; xml.roleWrapper
                                              Element=false; xml.sequenceOffset=20; xml.type
                                              Element=false; xml.typeWrapperElement=false
 Class        SwServiceArg
 Package      M2::MSR::DataDictionary::ServiceProcessTask
 Note         Specifies the properties of a data object exchanged during the call of an SwService,
              e.g. an argument or a return value.
              The SwServiceArg can also be used in the argument list of a C-macro. For this
              purpose the category shall be set to "MACRO". A reference to
              implementationDataType can optional be added if the actual argument has an
              implementationDataType.
 Base         ARObject, Identifiable, MultilanguageReferrable, Referrable
 Attribute    Type                Mul. Kind Note
 direction    ArgumentDirecti     0..1      attr Specifies the direction of the data transfer. The
              onEnum                             direction shall indicate the direction of the actual
                                                 information that is being consumed by the caller
                                                 and/or the callee, not the direction of formal
                                                 arguments in C.
                                                  Tags: xml.sequenceOffset=10
 swArraysiz   ValueList           0..1    aggr    This turns the argument of the service to an array.
 e
                                                  Tags: xml.sequenceOffset=20
 swDataDef    SwDataDefProp       0..1    aggr    Data properties of this SwServiceArg.
 Props        s
                                                  Tags: xml.sequenceOffset=30
 Class        SwSystemconst
 Package      M2::MSR::DataDictionary::SystemConstant
 Note         This element defines a system constant which serves an input to select a particular
              variation point. In particular a system constant serves as an operand of the binding
              function (swSyscond) in a Variation point.
              Note that the binding process can only happen if a value was assigned to to the
              referenced system constants.
              Tags: atp.recommendedPackage=SwSystemconsts
 Base         ARElement, ARObject, AtpDefinition, CollectableElement, Identifiable, Multilanguage
              Referrable, PackageableElement, Referrable
 Attribute    Type              Mul. Kind Note
 swDataDef    SwDataDefProp      0..1   aggr This denotes the data defintion properties of the
 Props        s                                system constant. In particular it is the limits and -
                                               in case the system constant is an enumeration -
                                               the compu method.
Tags: xml.sequenceOffset=40
                                                 Tags: xml.sequenceOffset=50
 syscString   SwSystemconst        1      ref    syscString indicates that the referenced system
                                                 constant shall be evaluated as a string according
                                                 to [TPS_SWCT_01431].
 Class        SwSystemconstValue
 Package      M2::AUTOSARTemplates::GenericStructure::VariantHandling
 Note         This meta-class assigns a particular value to a system constant.
 Base         ARObject
 Attribute    Type               Mul. Kind Note
 annotation   Annotation           *     aggr This provides the ability to add information why
                                                 the value is set like it is.
Tags: xml.sequenceOffset=30
                                                  Tags: xml.sequenceOffset=10
 value        Numerical            1       attr   This is the particular value of a system constant. It
                                                  is specified as Numerical. Further restrictions may
                                                  apply by the definition of the system constant.
                                                  Stereotypes: atpVariation
                                                  Tags: vh.latestBindingTime=preCompileTime
                                                  xml.sequenceOffset=20
 Class        SwSystemconstantValueSet
 Package      M2::AUTOSARTemplates::GenericStructure::VariantHandling
 Note         This meta-class represents the ability to specify a set of system constant values.
              Tags: atp.recommendedPackage=SwSystemconstantValueSets
 Base         ARElement, ARObject, CollectableElement, Identifiable, MultilanguageReferrable,
              PackageableElement, Referrable
 Attribute    Type             Mul. Kind Note
 swSystem     SwSystemconst     *      aggr This is one particular value of a system constant.
 constantVa   Value
 lue
              In case of multidimensional structures, the values are ordered such that the lowest
              index runs the fastest. In particular for maps and cuboids etc. the resulting long value
              list can be subsectioned using ValueGroup. But the processing needs to be done as if
              vg is not there.
              Note that numerical values and textual values should not be mixed.
 Base         ARObject
 Attribute    Type               Mul. Kind Note
 v            Numerical            1      attr   This is a non variant Value. It is provided for sake
                                                 of Compatibility to ASAM CDF.
Tags: xml.sequenceOffset=40
                                                Stereotypes: atpVariation
                                                Tags: vh.latestBindingTime=preCompileTime
                                                xml.sequenceOffset=20
 vg           ValueGroup          1     aggr    This allows to have intersections in the values in
                                                order to support specific rendering (eg. using
                                                stylesheets). For tools it is important that the v
                                                values are always processed in the same
                                                (flattened) order and the tool is able to interpret it
                                                without respecting vg.
                                                Tags: xml.sequenceOffset=50
 vt           VerbatimString      1      attr   This represents the values of textual data
                                                elements (Strings). Note that vt uses the | to
                                                separate the values for the different bitfield masks
                                                in case that the semantics of the related
                                                DataPrototype is described by means of a
                                                BITFIELD_TEXTTABLE in the associated
                                                CompuMethod.
                                                Tags: xml.sequenceOffset=30
 vtf          NumericalOrTex      1     aggr    Thias aggregation represents the ability to provide
              t                                 a value that is either numerical or text which
                                                existence is subject to variability.
                                                Stereotypes: atpVariation
                                                Tags: vh.latestBindingTime=preCompileTime
 Class        SwcBswMapping
 Package      M2::AUTOSARTemplates::CommonStructure::SwcBswMapping
 Note         Maps an SwcInternalBehavior to an BswInternalBehavior. This is required to
              coordinate the API generation and the scheduling for AUTOSAR Service
              Components, ECU Abstraction Components and Complex Driver Components by the
              RTE and the BSW scheduling mechanisms.
              Tags: atp.recommendedPackage=SwcBswMappings
 Base         ARElement, ARObject, AtpClassifier, AtpFeature, AtpStructureElement, Collectable
              Element, Identifiable, MultilanguageReferrable, PackageableElement, Referrable
 Attribute    Type                Mul. Kind Note
 bswBehavi    BswInternalBeh        1       ref   The mapped BswInternalBehavior
 or           avior
                                                 Stereotypes: atpVariation
                                                 Tags: vh.latestBindingTime=preCompileTime
 swcBehavi    SwcInternalBeh       1      ref    The mapped SwcInternalBehavior.
 or           avior
 synchroniz   SwcBswSynchr         *     aggr    A pair of SWC and BSW mode group prototypes
 edModeGr     onizedModeGro                      to be synchronized by the scheduler.
 oup          upPrototype
                                                 Stereotypes: atpVariation
                                                 Tags: vh.latestBindingTime=preCompileTime
 synchroniz   SwcBswSynchr         *     aggr    A pair of SWC and BSW Triggers to be
 edTrigger    onizedTrigger                      synchronized by the scheduler.
                                                 Stereotypes: atpVariation
                                                 Tags: vh.latestBindingTime=preCompileTime
 Class        SwcBswRunnableMapping
 Package      M2::AUTOSARTemplates::CommonStructure::SwcBswMapping
 Note         Maps a BswModuleEntity to a RunnableEntity if it is implemented as part of a BSW
              module (in the case of an AUTOSAR Service, a Complex Driver or an ECU
              Abstraction). The mapping can be used by a tool to find relevant information on the
              behavior, e.g. whether the bswEntity shall be running in interrupt context.
 Base         ARObject
 Attribute    Type               Mul. Kind Note
 bswEntity    BswModuleEntit       1      ref    The mapped BswModuleEntity
              y
 swcRunna     RunnableEntity       1      ref    The mapped SWC runnable.
 ble
 Class        SwcBswSynchronizedTrigger
 Package      M2::AUTOSARTemplates::CommonStructure::SwcBswMapping
 Note         Synchronizes a Trigger provided by a component via a port with a Trigger provided by
              a BSW module or cluster.
 Base         ARObject
 Attribute    Type               Mul. Kind Note
 bswTrigger   Trigger             1        ref  The BSW Trigger.
 swcTrigger   Trigger             1       iref  The SWC Trigger provided by a particular port.
 Class         SwcExclusiveAreaPolicy
 Package       M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior
 Note          Options how to generate the ExclusiveArea related APIs. If no
               SwcExclusiveAreaPolicy is specified for an ExclusiveArea the default values apply.
 Base          ARObject
 Attribute     Type              Mul. Kind Note
 apiPrincipl   ApiPrincipleEnu     1      attr   Specifies for this ExclusiveArea if either one
 e             m                                 common set of Enter and Exit APIs for the whole
                                                 software component is requested from the Rte or
                                                 if the set of Enter and Exit APIs is expected per
                                                 RunnableEntity. The default value is "common".
 exclusiveA    ExclusiveArea       1      ref    This reference represents the ExclusiveArea for
 rea                                             which the policy applies.
 Class         SwcImplementation
 Package       M2::AUTOSARTemplates::SWComponentTemplate::SwcImplementation
 Note          This meta-class represents a specialization of the general Implementation meta-class
               with respect to the usage in application software.
               Tags: atp.recommendedPackage=SwcImplementations
 Base          ARElement, ARObject, CollectableElement, Identifiable, Implementation,
               MultilanguageReferrable, PackageableElement, Referrable
 Attribute     Type              Mul. Kind Note
 behavior      SwcInternalBeh      1      ref   The internal behavior implemented by this
               avior                            Implementation.
 perInstanc    PerInstanceMe       *     aggr Allows a definition of the size of the per-instance
 eMemoryS      morySize                         memory for this implementation. The aggregation
 ize                                            of PerInstanceMemorySize is subject to variability
                                                with the purpose to support variability in the
                                                software components implementations. Typically
                                                different algorithms in the implementation are
                                                requiring different number of memory objects, in
                                                this case PerInstanceMemory.
                                                 Stereotypes: atpVariation
                                                 Tags: vh.latestBindingTime=preCompileTime
 requiredRT    String             0..1    attr   Identify a specific RTE vendor. This information is
 EVendor                                         potentially important at the time of integrating (in
                                                 particular: linking) the application code with the
                                                 RTE. The semantics is that (if the association
                                                 exists) the corresponding code has been created
                                                 to fit to the vendor-mode RTE provided by this
                                                 specific vendor. Attempting to integrate the code
                                                 with another RTE generated in vendor mode is in
                                                 general not possible.
 Class        SwcInternalBehavior
 Package      M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior
 Note         The SwcInternalBehavior of an AtomicSwComponentType describes the relevant
              aspects of the software-component with respect to the RTE, i.e. the RunnableEntities
              and the RTEEvents they respond to.
 Base         ARObject, AtpClassifier, AtpFeature, AtpStructureElement, Identifiable, Internal
              Behavior, MultilanguageReferrable, Referrable
 Attribute    Type                Mul. Kind Note
 arTypedPe    VariableDataPr       *     aggr Defines an AUTOSAR typed memory-block that
 rInstanceM   ototype                           needs to be available for each instance of the
 emory                                          SW-component.
                                                Stereotypes: atpSplitable
                                                Tags: atp.Splitkey=includedDataTypeSet
 includedM      IncludedModeD      *     aggr   This aggregation represents the included
 odeDeclar      eclarationGroup                 ModeDeclarationGroups
 ationGroup     Set
 Set                                            Stereotypes: atpSplitable
                                                Tags: atp.Splitkey=includedModeDeclaration
                                                GroupSet
                                                   Stereotypes: atpSplitable
                                                   Tags: atp.Splitkey=shortName
 Class         SwcModeManagerErrorEvent
 Package       M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior::RTE
               Events
 Note          This represents the ability to react on errors occurring during mode handling.
 Base          ARObject, AbstractEvent, AtpClassifier, AtpFeature, AtpStructureElement,
               Identifiable, MultilanguageReferrable, RTEEvent, Referrable
 Attribute     Type                  Mul. Kind Note
 modeGrou      ModeDeclaratio         1      iref   This represents the
 p             nGroupPrototyp                       ModeDeclarationGroupPrototype for which the
               e                                    error behavior of the mode manager applies.
 Class         SwcModeSwitchEvent
 Package       M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior::RTE
               Events
 Note          This event is raised upon a received mode change.
 Base          ARObject, AbstractEvent, AtpClassifier, AtpFeature, AtpStructureElement,
               Identifiable, MultilanguageReferrable, RTEEvent, Referrable
 Attribute     Type                  Mul. Kind Note
 activation    ModeActivation         1     attr  Specifies if the event is activated on entering or
               Kind                               exiting the referenced Mode.
 mode (or-     ModeDeclaratio        1..2   iref  Reference to one or two Modes that initiate the
 dered)        n                                  SwcModeSwitchEvent.
 Class         SwcServiceDependency
 Package       M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior::Service
               Mapping
 Note          Specialization of ServiceDependency in the context of an SwcInternalBehavior. It
               allows to associate ports, port groups and (in special cases) data defined for an
               atomic software component to a given ServiceNeeds element.
 Base          ARObject, AtpClassifier, AtpFeature, AtpStructureElement, Identifiable,
               MultilanguageReferrable, Referrable, ServiceDependency
 Attribute     Type                Mul. Kind Note
                                                 Stereotypes: atpVariation
                                                 Tags: vh.latestBindingTime=preCompileTime
 assignedP    RoleBasedPort        *      aggr   Defines the role of an associated port of the same
 ort          Assignment                         component.
 Class        SymbolProps
 Package      M2::AUTOSARTemplates::SWComponentTemplate::Components
 Note         This meta-class represents the ability to attach with the symbol attribute a symbolic
              name that is conform to C language requirements to another meta-class, e.g.
              AtomicSwComponentType, that is a potential subject to a name clash on the level of
              RTE source code.
 Base         ARObject, ImplementationProps, Referrable
 Attribute    Type               Mul. Kind Note
                                             
 Class        SynchronousServerCallPoint
 Package      M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior::ServerCall
 Note         This means that the RunnableEntity is supposed to perform a blocking wait for a
              response from the server.
 Base         ARObject, AbstractAccessPoint, AtpClassifier, AtpFeature, AtpStructureElement,
              Identifiable, MultilanguageReferrable, Referrable, ServerCallPoint
 Attribute    Type                  Mul. Kind Note
 calledFrom   ExclusiveAreaN        0..1  ref    This indicates that the call point is located at the
 WithinExcl   estingOrder                        deepest level inside one or more ExclusiveAreas
 usiveArea                                       that are nested in the given order.
 Class         SystemMapping
 Package       M2::AUTOSARTemplates::SystemTemplate
 Note          The system mapping aggregates all mapping aspects (mapping of SW components
               to ECUs, mapping of data elements to signals, and mapping constraints).
 Base          ARObject, Identifiable, MultilanguageReferrable, Referrable
 Attribute     Type                Mul. Kind Note
 application   ApplicationPartit     *     aggr Mapping of ApplicationPartitions to EcuPartitions
 PartitionTo   ionToEcuPartiti
 EcuPartitio   onMapping                          Stereotypes: atpSplitable; atpVariation
 nMapping                                         Tags: atp.Splitkey=shortName, variation
                                                  Point.shortLabel
                                                  vh.latestBindingTime=postBuild
 dataMappi     DataMapping           *     aggr The data mappings defined.
 ng
                                                 Stereotypes: atpVariation
                                                 Tags: vh.latestBindingTime=postBuild
 ecuResour     ECUMapping          *     aggr    Mapping of hardware related topology elements
 ceMapping                                       onto their counterpart definitions in the ECU
                                                 Resource Template.
                                                 Stereotypes: atpVariation
                                                 Tags: vh.latestBindingTime=systemDesignTime
 j1939Contr    J1939Controller     *     aggr    Mapping of a J1939ControllerApplication to a
 ollerApplic   ApplicationToJ1                   J1939NmNode.
 ationToJ19    939NmNodeMa
 39NmNod       pping
 eMapping
 mappingC      MappingConstr       *     aggr    Constraints that limit the mapping freedom for the
 onstraint     aint                              mapping of SW components to ECUs.
                                                 Stereotypes: atpVariation
                                                 Tags: vh.latestBindingTime=systemDesignTime
 pncMappin     PncMapping          *     aggr    Stereotypes: atpVariationTags: vh.latestBinding
 g                                               Time=systemDesignTime
 resourceE     EcuResourceEs       *     aggr    Resource estimations for this set of mappings,
 stimation     timation                          zero or one per ECU instance. atpVariation: Used
                                                 ECUs are variable.
                                                 Stereotypes: atpVariation
                                                 Tags: vh.latestBindingTime=systemDesignTime
 signalPath    SignalPathCons      *     aggr    Constraints that limit the mapping freedom for the
 Constraint    traint                            mapping of data elements to signals.
                                                 Stereotypes: atpVariation
                                                 Tags: vh.latestBindingTime=systemDesignTime
                                                   Stereotypes: atpVariation
                                                   Tags: vh.latestBindingTime=preCompileTime
 swMappin       SwcToEcuMapp         *     aggr    The mappings of SW components to ECUs.
 g              ing
                                                   atpVariation: SWC shall be mapped to other
                                                   ECUs.
                                                   Stereotypes: atpVariation
                                                   Tags: vh.latestBindingTime=preCompileTime
 swcToAppl      SwcToApplicati       *     aggr    Allows to map a given SwComponentPrototype to
 icationParti   onPartitionMapp                    a formally defined partition at a point in time when
 tionMappin     ing                                the corresponding EcuInstance is not yet known or
 g                                                 defined.
 Class          SystemSignal
 Package        M2::AUTOSARTemplates::SystemTemplate::Fibex::FibexCore::CoreCommunication
 Note           The system signal represents the communication systems view of data exchanged
                between SW components which reside on different ECUs. The system signals allow
                to represent this communication in a flattened structure, with exactly one system
                signal defined for each data element prototype sent and received by connected SW
                component instances.
                Tags: atp.recommendedPackage=SystemSignals
 Base           ARElement, ARObject, CollectableElement, Identifiable, MultilanguageReferrable,
                PackageableElement, Referrable
 Attribute      Type             Mul. Kind Note
 dynamicLe      Boolean           1       attr  The length of dynamic length signals is variable in
 ngth                                           run-time. Only a maximum length of such a signal
                                                is specified in the configuration (attribute length in
                                                ISignal element).
 physicalPr     SwDataDefProp    0..1    aggr Specification of the physical representation.
 ops            s
 Class          SystemSignalGroup
 Package        M2::AUTOSARTemplates::SystemTemplate::Fibex::FibexCore::CoreCommunication
 Note           A signal group refers to a set of signals that must always be kept together. A signal
                group is used to guarantee the atomic transfer of AUTOSAR composite data types.
                The SystemSignalGroup defines a signal grouping on VFB level. On cluster level the
                Signal grouping is described by the ISignalGroup element.
                Tags: atp.recommendedPackage=SystemSignalGroups
 Base           ARElement, ARObject, CollectableElement, Identifiable, MultilanguageReferrable,
                PackageableElement, Referrable
 Attribute      Type             Mul. Kind Note
 systemSig      SystemSignal      *       ref   Reference to a set of SystemSignals that must
 nal                                            always be kept together.
 transformin    SystemSignal     0..1     ref   Optional reference to the SystemSignal which
 gSystemSi                                      shall contain the transformed (linear) data.
 gnal
 Class          TextTableMapping
 Package        M2::AUTOSARTemplates::SWComponentTemplate::PortInterface
 Note           Defines the mapping of two DataPrototypes typed by AutosarDataTypes that refer to
                CompuMethods of category TEXTTABLE, SCALE_LINEAR_AND_TEXTTABLE or
                BITFIELD_TEXTTABLE.
 Base           ARObject
 Attribute      Type              Mul. Kind Note
 bitfieldText   PositiveInteger   0..1     attr  This attribute can be used to support the mapping
 TableMask                                       of bit field to bit field, boolean values to bit fields,
 First                                           and vice versa. The attribute defines the bit mask
                                                 for the first element of the TextTableMapping.
                                                    Stereotypes: atpVariation
                                                    Tags: vh.latestBindingTime=preCompileTime
 bitfieldText   PositiveInteger     0..1     attr   This attribute can be used to support the mapping
 TableMask                                          of bit field to bit field, boolean values to bit fields,
 Second                                             and vice versa. The attribute defines the bit mask
                                                    for the second element of the TextTableMapping.
                                                    Stereotypes: atpVariation
                                                    Tags: vh.latestBindingTime=preCompileTime
 identicalM     Boolean               1      attr   If identicalMapping is set == true the values of the
 apping                                             two referenced DataPrototypes do not need any
                                                    conversion of the values.
 mappingDi      MappingDirectio       1      attr   Specifies the conversion direction for which the
 rection        nEnum                               TextTableMapping is applicable.
 valuePair      TextTableValue        *     aggr    Defines a pair of values which are translated into
                Pair                                each other.
 Class        TextValueSpecification
 Package      M2::AUTOSARTemplates::CommonStructure::Constants
 Note         The purpose of TextValueSpecification is to define the labels that correspond to
              enumeration values.
 Base         ARObject, ValueSpecification
 Attribute    Type              Mul. Kind Note
 value        VerbatimString      1      attr   This is the value itself.
 Class        TimingEvent
 Package      M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior::RTE
              Events
 Note         TimingEvent references the RunnableEntity that need to be started in response to the
              TimingEvent
 Base         ARObject, AbstractEvent, AtpClassifier, AtpFeature, AtpStructureElement,
              Identifiable, MultilanguageReferrable, RTEEvent, Referrable
 Attribute    Type                  Mul. Kind Note
 period       TimeValue              1    attr   Period of timing event in seconds. The value of
                                                 this attribute shall be greater than zero.
              Tags: vh.latestBindingTime=postBuild
 Base         ARObject, Describable
 Attribute    Type               Mul. Kind Note
 csErrorRe    CSTransformer       0..1  attr  Defines whether the transformer chain of
 action       ErrorReactionE                  client/server communication coordinates an
              num                             autonomous error reaction together with the RTE
                                              or whether any error reaction is the responsibility
                                              of the application.
 dataProtot   DataPrototypeT       *    aggr Fine granular modeling of TransfromationProps on
 ypeTransfo   ransformationPr                 the level of DataPrototypes.
 rmationPro   ops
 ps
 transforme   Transformation        1      ref    Reference to the TransformationTechnology
 r            Technology                          description that contains transformer specific and
                                                  ISignal independent configuration properties.
 Class         TransformationTechnology
 Package       M2::AUTOSARTemplates::SystemTemplate::Transformer
 Note          A TransformationTechnology is a transformer inside a transformer chain.
               Tags: xml.namePlural=TRANSFORMATION-TECHNOLOGIES
 Base          ARObject, Identifiable, MultilanguageReferrable, Referrable
 Attribute     Type                Mul. Kind Note
 bufferProp    BufferProperties      1     aggr Aggregation of the mandatory BufferProperties.
 erties
 hasInternal   Boolean            0..1     attr   This attribute defines whether the Transformer has
 State                                            an internal state or not.
 needsOrigi    Boolean            0..1     attr   Specifies whether this transformer gets access to
 nalData                                          the SWCs original data.
 protocol      String               1      attr   Specifies the protocol that is implemented by this
                                                  transformer.
 transforma    Transformation     0..1    aggr    A transformer can be configured with transformer
 tionDescrip   Description                        specific parameters which are represented by the
 tion                                             TransformerDescription.
                                                  Stereotypes: atpVariation
                                                  Tags: vh.latestBindingTime=postBuild
 transforme    TransformerCla       1      attr   Specifies to which transformer class this
 rClass        ssEnum                             transformer belongs.
 version       String               1      attr   Version of the implemented protocol.
 Enumeration     TransformerClassEnum
 Package         M2::AUTOSARTemplates::SystemTemplate::Transformer
 Note            Specifies the transformer class of a transformer.
 Literal         Description
 custom          The transformer is a custom transformer.
                 Tags: atp.EnumerationValue=0
 safety          The transformer is a safety transformer.
                 Tags: atp.EnumerationValue=1
 security        The transformer is a security transformer.
                 Tags: atp.EnumerationValue=2
 serializer      The transformer is a serializing transformer.
Tags: atp.EnumerationValue=3
 Class         TransformerHardErrorEvent
 Package       M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior::RTE
               Events
 Note          The event is raised when data are received which should trigger a Client/Server
               operation or an external trigger but during transformation of the data a hard
               transformer error occurred.
 Base          ARObject, AbstractEvent, AtpClassifier, AtpFeature, AtpStructureElement,
               Identifiable, MultilanguageReferrable, RTEEvent, Referrable
 Attribute     Type                  Mul. Kind Note
 operation     ClientServerOp        0..1   iref    This represents the ClientServerOperation to
               eration                              which the TransformerHardErrorEvent refers to.
 trigger       Trigger               0..1   iref    Trigger for which the transformer can trigger this
                                                    TransformerHardErrorEvent
 Class         TransmissionAcknowledgementRequest
 Package       M2::AUTOSARTemplates::SWComponentTemplate::Communication
 Note          Requests transmission acknowledgement that data has been sent successfully.
               Success/failure is reported via a SendPoint of a RunnableEntity.
 Base          ARObject
 Attribute     Type                Mul. Kind Note
 timeout       TimeValue             1      attr   Number of seconds before an error is reported or
                                                   in case of allowed redundancy, the value is sent
                                                   again.
 Class         Trigger
 Package       M2::AUTOSARTemplates::CommonStructure::TriggerDeclaration
 Note          A trigger which is provided (i.e. released) or required (i.e. used to activate something)
               in the given context.
 Base          ARObject, AtpClassifier, AtpFeature, AtpStructureElement, Identifiable,
               MultilanguageReferrable, Referrable
 Attribute     Type                 Mul. Kind Note
 swImplPoli    SwImplPolicyEn       0..1     attr    This attribute, when set to value queued, allows
 cy            um                                    for a queued processing of Triggers.
 triggerPeri   Multidimensiona      0..1    aggr Optional definition of a period in case of a
 od            lTime                                 periodically (time or angle) driven external trigger.
 Class        TriggerInterface
 Package      M2::AUTOSARTemplates::SWComponentTemplate::PortInterface
 Note         A trigger interface declares a number of triggers that can be sent by an trigger source.
              Tags: atp.recommendedPackage=PortInterfaces
 Base         ARElement, ARObject, AtpBlueprint, AtpBlueprintable, AtpClassifier, AtpType,
              CollectableElement, Identifiable, MultilanguageReferrable, PackageableElement, Port
              Interface, Referrable
 Attribute    Type                Mul. Kind Note
 trigger      Trigger              1..*   aggr The Trigger of this trigger interface.
 Class        TriggerInterfaceMapping
 Package      M2::AUTOSARTemplates::SWComponentTemplate::PortInterface
 Note         Defines the mapping of unequal named Triggers in context of two different
              TriggerInterfaces.
 Base         ARObject, AtpBlueprint, AtpBlueprintable, Identifiable, MultilanguageReferrable, Port
              InterfaceMapping, Referrable
 Attribute    Type               Mul. Kind Note
 triggerMap   TriggerMapping     1..*    aggr Mapping of two Trigger in two different
 ping                                           TriggerInterface
 Class        TriggerToSignalMapping
 Package      M2::AUTOSARTemplates::SystemTemplate::DataMapping
 Note         This meta-class represents the ability to map a trigger to a SystemSignal of size 0.
              The Trigger does not transport any other information than its existence, therefore the
              limitation in terms of signal length.
 Base         ARObject, DataMapping
 Attribute    Type                 Mul. Kind Note
 systemSig    SystemSignal           1        ref   This is the SystemSignal taken to transport the
 nal                                                Trigger over the network.
                                                  Tags: xml.sequenceOffset=20
 trigger      Trigger              1       iref   This represents the Trigger that shall be used to
                                                  trigger RunnableEntities deployed to a remote
                                                  ECU.
Tags: xml.sequenceOffset=10
 Class        Unit
 Package      M2::MSR::AsamHdo::Units
 Note         This is a physical measurement unit. All units that might be defined should stem from
              SI units. In order to convert one unit into another factor and offset are defined.
              For the calculation from SI-unit to the defined unit the factor (factorSiToUnit ) and the
              offset (offsetSiToUnit ) are applied as follows:
                  x [{unit}] := y * [{siUnit}] * factorSiToUnit [[unit]/{siUnit}] +
              offsetSiToUnit [{unit}]
              For the calculation from a unit to SI-unit the reciprocal of the factor (factorSiToUnit )
              and the negation of the offset (offsetSiToUnit ) are applied.
                 y {siUnit} := (x*{unit} - offsetSiToUnit [{unit}]) / (factorSiToUnit
              [[unit]/{siUnit}]
              Tags: atp.recommendedPackage=Units
 Base         ARElement, ARObject, CollectableElement, Identifiable, MultilanguageReferrable,
              PackageableElement, Referrable
 Attribute    Type             Mul. Kind Note
 displayNa    SingleLanguage   0..1    aggr This specifies how the unit shall be displayed in
 me           UnitNames                       documents or in user interfaces of tools.The
                                              displayName corresponds to the Unit.Display in an
                                              ASAM MCD-2MC file.
                                                   Tags: xml.sequenceOffset=20
 factorSiTo   Float                0..1     attr   This is the factor for the conversion from SI Units
 Unit                                              to units.
                                                   Tags: xml.sequenceOffset=30
 offsetSiTo   Float                0..1     attr   This is the offset for the conversion from and to
 Unit                                              siUnits.
                                                   Tags: xml.sequenceOffset=40
 physicalDi   PhysicalDimens       0..1     ref    This association represents the physical
 mension      ion                                  dimension to which the unit belongs to. Note that
                                                   only values with units of the same physical
                                                   dimensions might be converted.
Tags: xml.sequenceOffset=50
                                                   Tags: xml.sequenceOffset=30
 vf     (or-   Numerical            *       attr   This is one entry in the list of numerical values
 dered)
                                                   Stereotypes: atpVariation
                                                   Tags: vh.latestBindingTime=preCompileTime
                                                   xml.roleElement=true; xml.roleWrapper
                                                   Element=false; xml.typeElement=false; xml.type
                                                   WrapperElement=false
 Class         VariableAccess
 Package       M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior::Data
               Elements
 Note          The presence of a VariableAccess implies that a RunnableEntity needs access to a
               VariableDataPrototype.
               The kind of access is specified by the role in which the class is used.
 Base          ARObject, AbstractAccessPoint, AtpClassifier, AtpFeature, AtpStructureElement,
               Identifiable, MultilanguageReferrable, Referrable
 Attribute     Type                  Mul. Kind Note
 accessedV     AutosarVariable        1    aggr This denotes the accessed variable.
 ariable       Ref
 scope         VariableAccess        0..1   attr   This attribute allows for constraining the scope of
               ScopeEnum                           the corresponding communication. For example, it
                                                   possible to express whether the communication is
                                                   intended to cross the boundary of an ECU or
                                                   whether it is intended not to cross the boundary of
                                                   a single partition.
 Class        VariableAndParameterInterfaceMapping
 Package      M2::AUTOSARTemplates::SWComponentTemplate::PortInterface
 Note         Defines the mapping of VariableDataPrototypes or ParameterDataPrototypes in
              context of two different SenderReceiverInterfaces, NvDataInterfaces or
              ParameterInterfaces.
 Base         ARObject, AtpBlueprint, AtpBlueprintable, Identifiable, MultilanguageReferrable, Port
              InterfaceMapping, Referrable
 Attribute    Type                 Mul. Kind Note
 dataMappi    DataPrototypeM        1..*  aggr Defines the mapping of two particular
 ng           apping                            VariableDataPrototypes or
                                                ParameterDataPrototypes with unequal names
                                                and/or unequal semantic (resolution or range) in
                                                context of two different SenderReceiverInterfaces,
                                                NvDataInterfaces or ParameterInterfaces
 Class        VariableDataPrototype
 Package      M2::AUTOSARTemplates::SWComponentTemplate::Datatype::DataPrototypes
 Note         A VariableDataPrototype is used to contain values in an ECU application. This means
              that most likely a VariableDataPrototype allocates "static" memory on the ECU. In
              some cases optimization strategies might lead to a situation where the memory
              allocation can be avoided.
 Class        VariationPoint
 Package      M2::AUTOSARTemplates::GenericStructure::VariantHandling
 Note         This meta-class represents the ability to express a "structural variation point". The
              container of the variation point is part of the selected variant if swSyscond evaluates
              to true and each postBuildVariantCriterion is fulfilled.
 Base         ARObject
 Attribute    Type                 Mul. Kind Note
 desc         MultiLanguage        0..1    aggr This allows to describe shortly the purpose of the
              OverviewParagr                        variation point.
              aph
                                                    Tags: xml.sequenceOffset=20
                                               Tags: xml.sequenceOffset=28
 formalBlue    BlueprintFormul   0..1   aggr   This denotes a formal blueprintCondition. This
 printCondit   a                               shall be not in contradiction with
 ion                                           blueprintCondition. It is recommanded only to use
                                               one of the two.
                                               Tags: xml.sequenceOffset=29
 postBuildV    PostBuildVarian    *     aggr   This is the set of post build variant conditions
 ariantCond    tCondition                      which all shall be fulfilled in order to (postbuild)
 ition                                         bind the variation point.
                                               Tags: xml.sequenceOffset=40
 sdg           Sdg               0..1   aggr   An optional special data group is attached to every
                                               variation point. These data can be used by
                                               external software systems to attach application
                                               specific data. For example, a variant management
                                               system might add an identifier, an URL or a
                                               specific classifier.
                                               Tags: xml.sequenceOffset=50
 shortLabel    Identifier        0..1   attr   This provides a name to the particular variation
                                               point to support the RTE generator. It is necessary
                                               for supporting splitable aggregations and if binding
                                               time is later than codeGenerationTime, as well as
                                               some RTE conditions. It needs to be unique with
                                               in the enclosing Identifiables with the same
                                               ShortName.
                                               Tags: xml.sequenceOffset=10
 swSyscon      ConditionByFor    0..1   aggr   This condition acts as Binding Function for the
 d             mula                            VariationPoint. Note that the mulitplicity is 0..1 in
                                               order to support pure postBuild variants.
Tags: xml.sequenceOffset=30
 Class        VariationPointProxy
 Package      M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior::Variant
              Handling
 Note         The VariationPointProxy represents variation points of the C/C++ implementation. In
              case of bindingTime = compileTime the RTE provides defines which can be used for
              Pre Processor directives to implement compileTime variability.
 Base         ARObject, Identifiable, MultilanguageReferrable, Referrable
 Attribute    Type                Mul. Kind Note
 conditionA   ConditionByFor      0..1    aggr This condition acts as Binding Function for the
 ccess        mula                               VariationPoint.
 implement    Implementation      0..1      ref  This association to ImplementationDataType shall
 ationDataT   DataType                           be taken as an implementation hint by the RTE
 ype                                             generator.
 postBuildV   PostBuildVarian     0..1      ref  This represents the applicable
 alueAcces    tCriterion                         PostBuildVariantCriterion in the context of a
 s                                               VariationPointProxy.
 Class        WaitPoint
 Package      M2::AUTOSARTemplates::SWComponentTemplate::SwcInternalBehavior::RTE
              Events
 Note         This defines a wait-point for which the RunnableEntity can wait.
 Base         ARObject, Identifiable, MultilanguageReferrable, Referrable
 Attribute    Type                Mul. Kind Note
 timeout      TimeValue             1       attr   Time in seconds before the WaitPoint times out
                                                   and the blocking wait call returns with an error
                                                   indicating the timeout.
 trigger      RTEEvent              1       ref    This is the RTEEvent this WaitPoint is waiting for.
               Note that not all of the attributes or associated elements are useful all of the time.
               Hence, the process definition (e.g. expressed with an OCL or a Document Control
               Instance MSR-DCI) has the task of implementing limitations.
               Tags: vh.latestBindingTime=codeGenerationTime
 Base          ARObject
 Attribute     Type               Mul. Kind Note
 additionalN   NativeDeclarati     0..1  attr  This attribute is used to declare native qualifiers of
 ativeType     onString                        the programming language which can neither be
 Qualifier                                     deduced from the baseType (e.g. because the
                                               data object describes a pointer) nor from other
                                               more abstract attributes. Examples are qualifiers
                                               like "volatile", "strict" or "enum" of the C-language.
                                               All such declarations have to be put into one
                                               string.
                                                   Tags: xml.sequenceOffset=235
 annotation    Annotation            *     aggr    This aggregation allows to add annotations (yellow
                                                   pads ...) related to the current data object.
Tags: xml.sequenceOffset=50
                                                Tags: xml.sequenceOffset=180
 dataConstr    DataConstr         0..1   ref    Data constraint for this data object.
                                                Tags: xml.sequenceOffset=190
 displayFor    DisplayFormatS     0..1   attr   This property describes how a number is to be
 mat           tring                            rendered e.g. in documents or in a measurement
                                                and calibration system.
                                                Tags: xml.sequenceOffset=210
 implement     Implementation     0..1   ref    This association denotes the
 ationDataT    DataType                         ImplementationDataType of a data declaration via
 ype                                            its aggregated SwDataDefProps. It is used
                                                whenever a data declaration is not directly
                                                referring to a base type. Especially
                                                     redefinition of an ImplementationDataType
                                                      via a "typedef" to another
                                                      ImplementationDatatype
                                                     the target type of a pointer (see
                                                      SwPointerTargetProps), if it does not refer
                                                      to a base type directly
                                                     the data type of an array or record element
                                                      within an ImplementationDataType, if it
                                                      does not refer to a base type directly
                                                     the data type of an SwServiceArg, if it does
                                                      not refer to a base type directly
                                                Tags: xml.sequenceOffset=215
 invalidValu   ValueSpecificati   0..1   aggr   Optional value to express invalidity of the actual
 e             on                               data element.
                                                Tags: xml.sequenceOffset=255
 stepSize      Float              0..1   attr   This attribute can be used to define a value which
                                                is added to or subtracted from the value of a
                                                DataPrototype when using up/down keys while
                                                calibrating.
 swAddrMet     SwAddrMethod       0..1   ref    Addressing method related to this data object. Via
 hod                                            an association to the same SwAddrMethod it can
                                                be specified that several DataPrototypes shall be
                                                located in the same memory without already
                                                specifying the memory section itself.
Tags: xml.sequenceOffset=30
                                               Tags: xml.sequenceOffset=33
 swBitRepr     SwBitRepresent   0..1   aggr    Description of the binary representation in case of
 esentation    ation                           a bit variable.
                                               Tags: xml.sequenceOffset=60
 swCalibrati   SwCalibrationA   0..1   attr    Specifies the read or write access by MCD tools
 onAccess      ccessEnum                       for this data object.
                                               Tags: xml.sequenceOffset=70
 swCalprm      SwCalprmAxisS    0..1   aggr    This specifies the properties of the axes in case of
 AxisSet       et                              a curve or map etc. This is mainly applicable to
                                               calibration parameters.
                                               Tags: xml.sequenceOffset=90
 swCompari     SwVariableRefP    *     aggr    Variables used for comparison in an MCD
 sonVariabl    roxy                            process.
 e
                                               Tags: xml.sequenceOffset=170; xml.type
                                               Element=false
 swDataDe      SwDataDepend     0..1   aggr    Describes how the value of the data object has to
 pendency      ency                            be calculated from the value of another data
                                               object (by the MCD system).
                                               Tags: xml.sequenceOffset=200
 swHostVar     SwVariableRefP   0..1   aggr    Contains a reference to a variable which serves as
 iable         roxy                            a host-variable for a bit variable. Only applicable
                                               to bit objects.
                                                Tags: xml.sequenceOffset=240
 swInterpol    Identifier        0..1   attr    This is a keyword identifying the mathematical
 ationMetho                                     method to be applied for interpolation. The
 d                                              keyword needs to be related to the interpolation
                                                routine which needs to be invoked.
                                                Tags: xml.sequenceOffset=250
 swIsVirtual   Boolean           0..1   attr    This element distinguishes virtual objects. Virtual
                                                objects do not appear in the memory, their
                                                derivation is much more dependent on other
                                                objects and hence they shall have a
                                                swDataDependency .
                                                Tags: xml.sequenceOffset=260
 swPointerT    SwPointerTarge    0..1   aggr    Specifies that the containing data object is a
 argetProps    tProps                           pointer to another data object.
                                                Tags: xml.sequenceOffset=280
 swRecordL     SwRecordLayo      0..1    ref    Record layout for this data object.
 ayout         ut
                                                Tags: xml.sequenceOffset=290
 swRefresh     Multidimensiona   0..1   aggr    This element specifies the frequency in which the
 Timing        lTime                            object involved shall be or is called or calculated.
                                                This timing can be collected from the task in which
                                                write access processes to the variable run. But
                                                this cannot be done by the MCD system.
Tags: xml.sequenceOffset=300
                                                Tags: xml.sequenceOffset=120
 swValueBl    Numerical           0..1   attr   This represents the size of a Value Block
 ockSize
                                                Stereotypes: atpVariation
                                                Tags: vh.latestBindingTime=preCompileTime
                                                xml.sequenceOffset=80
 unit         Unit                0..1   ref    Physical unit associated with the semantics of this
                                                data object. This attribute applies if no
                                                compuMethod is specified. If both units (this as
                                                well as via compuMethod) are specified the units
                                                shall be compatible.
                                                Tags: xml.sequenceOffset=350
 valueAxisD   ApplicationPrimi    0..1   ref    The referenced ApplicationPrimitiveDataType
 ataType      tiveDataType                      represents the primitive data type of the value axis
                                                within a compound primitive (e.g. curve, map). It
                                                supersedes CompuMethod, Unit, and BaseType.
Tags: xml.sequenceOffset=355
E.1 Com
E.1.1 ComGroupSignal
                       This ID identifies signals and signal groups in the COM APIs using
                       Com_SignalIdType or Com_SignalGroupIdType parameter
                       respectively.
 Multiplicity          0..1
 Type                  EcucIntegerParamDef (Symbolic Name generated for this parameter)
 Range                 0 .. 65535
 Default Value
 Post-Build Variant    false
 Multiplicity
 Post-Build Variant    false
 Value
 Multiplicity          Pre-compile time             X   All Variants
 Configuration Class
                       Link time                    
                       Post-build time              
 Value Configuration   Pre-compile time             X   All Variants
 Class
                       Link time                    
                       Post-build time              
 Scope / Dependency    scope: ECU
                       Range: 0..8 for normal CAN/ LIN I-PDUs, 0..64 for CAN FD I-PDUs,
                       0..254 for normal FlexRay I-PDUs (all of ComIPduType NORMAL),
                       0..4294967295 for I-PDUs with ComIPduType TP.
 Multiplicity          0..1
 Type                  EcucIntegerParamDef
 Range                 0 .. 4294967295
 Default Value
 Post-Build Variant    false
 Multiplicity
 Post-Build Variant    false
 Value
 Multiplicity          Pre-compile time              X    VARIANT-PRE-COMPILE
 Configuration Class
                       Link time                     X    VARIANT-LINK-TIME,
                                                          VARIANT-POST-BUILD
                       Post-build time               
 Value Configuration   Pre-compile time              X    VARIANT-PRE-COMPILE
 Class
                       Link time                     X    VARIANT-LINK-TIME,
                                                          VARIANT-POST-BUILD
                       Post-build time               
 Scope / Dependency    scope: local
 Included Containers
 Container Name             Multiplicity   Scope / Dependency
 ComFilter                     0..1        This container contains the configuration parameters of
                                           the AUTOSAR COM modules Filters.
E.1.2 ComIPdu
 Included Containers
 Container Name             Multiplicity   Scope / Dependency
 ComIPduCounter                0..1        This optional container contains the configuration
                                           parameters of PDU Counter.
 ComIPduReplication                0..1    This optional container contains the information needed
                                           for each I-PDU replicated.
 ComTxIPdu                         0..1    This container contains additional transmission related
                                           configuration parameters of the AUTOSAR COM
                                           modules I-PDUs.
E.1.3 ComSignal
                       This ID identifies signals and signal groups in the COM APIs using
                       Com_SignalIdType or Com_SignalGroupIdType parameter
                       respectively.
 Multiplicity          0..1
 Type                  EcucIntegerParamDef (Symbolic Name generated for this parameter)
 Range                 0 .. 65535
 Default Value
 Post-Build Variant    false
 Multiplicity
 Post-Build Variant    false
 Value
 Multiplicity          Pre-compile time               X    All Variants
 Configuration Class
                       Link time                      
                       Post-build time                
 Value Configuration   Pre-compile time               X    All Variants
 Class
                       Link time                      
                       Post-build time                
 Scope / Dependency    scope: ECU
                       Range: 0..8 for normal CAN/ LIN I-PDUs, 0..64 for CAN FD I-PDUs,
                       0..254 for normal FlexRay I-PDUs (all of ComIPduType NORMAL),
                       0..4294967295 for I-PDUs with ComIPduType TP.
 Multiplicity          0..1
 Type                  EcucIntegerParamDef
 Range                 0 .. 4294967295
 Default Value
 Post-Build Variant    false
 Multiplicity
 Post-Build Variant    false
 Value
 Multiplicity          Pre-compile time              X    VARIANT-PRE-COMPILE
 Configuration Class
                       Link time                     X    VARIANT-LINK-TIME,
                                                          VARIANT-POST-BUILD
                       Post-build time               
 Value Configuration   Pre-compile time              X    VARIANT-PRE-COMPILE
 Class
                       Link time                     X    VARIANT-LINK-TIME,
                                                          VARIANT-POST-BUILD
                       Post-build time               
 Scope / Dependency    scope: local
                       Range: 0..63 for CAN and LIN, 0..511 for CAN FD, 0..2031 for FlexRay,
                       0..4294967295 for TP.
 Multiplicity          0..1
 Type                  EcucIntegerParamDef
 Range                 0 .. 4294967295
 Default Value
 Post-Build Variant    true
 Multiplicity
 Post-Build Variant    true
 Value
 Multiplicity          Pre-compile time               X    VARIANT-PRE-COMPILE
 Configuration Class
                       Link time                      X    VARIANT-LINK-TIME
                       Post-build time                X    VARIANT-POST-BUILD
 Value Configuration   Pre-compile time               X    VARIANT-PRE-COMPILE
 Class
                       Link time                      X    VARIANT-LINK-TIME
                       Post-build time                X    VARIANT-POST-BUILD
 Scope / Dependency    scope: local
 Included Containers
 Container Name             Multiplicity   Scope / Dependency
 ComFilter                     0..1        This container contains the configuration parameters of
                                           the AUTOSAR COM modules Filters.
E.1.4 ComSignalGroup
                       This ID identifies signals and signal groups in the COM APIs using
                       Com_SignalIdType or Com_SignalGroupIdType parameter
                       respectively.
 Multiplicity          0..1
 Type                  EcucIntegerParamDef (Symbolic Name generated for this parameter)
 Range                 0 .. 65535
 Default Value
 Post-Build Variant    false
 Multiplicity
 Post-Build Variant    false
 Value
 Multiplicity          Pre-compile time               X    All Variants
 Configuration Class
                       Link time                      
                       Post-build time                
 Value Configuration   Pre-compile time               X    All Variants
 Class
                       Link time                      
                       Post-build time                
 Scope / Dependency    scope: ECU
                       Range: 0..63 for CAN and LIN, 0..511 for CAN FD, 0..2031 for FlexRay,
                       0..4294967295 for TP.
 Multiplicity          0..1
 Type                  EcucIntegerParamDef
 Range                 0 .. 4294967295
 Default Value
 Post-Build Variant    true
 Multiplicity
 Post-Build Variant    true
 Value
 Multiplicity          Pre-compile time               X    VARIANT-PRE-COMPILE
 Configuration Class
                       Link time                      X    VARIANT-LINK-TIME
                       Post-build time                X    VARIANT-POST-BUILD
 Value Configuration   Pre-compile time               X    VARIANT-PRE-COMPILE
 Class
                       Link time                      X    VARIANT-LINK-TIME
                       Post-build time                X    VARIANT-POST-BUILD
 Scope / Dependency    scope: local
 Included Containers
 Container Name        Multiplicity   Scope / Dependency
 ComGroupSignal           0..*        This container contains the configuration parameters of
                                      group signals. I.e. signals that are included within a
                                      signal group.
E.2 LdCom
E.2.1 LdComConfig
 Included Containers
 Container Name             Multiplicity     Scope / Dependency
 LdComIPdu                     0..*          Contains the configuration parameters of the IPdu inside
                                             LdCom.
E.2.2 LdComIPdu
No Included Containers
E.3 EcuC
E.3.1 EcucPartition
No Included Containers
E.4 NvM
E.4.1 NvMBlockDescriptor
                       true: CRC will be used for this NVRAM block. false: CRC will not be
                       used for this NVRAM block.
 Multiplicity          1
 Type                  EcucBooleanParamDef
 Default Value
                       true: calling of NvMSetRamBlockStatus for this RAM block shall set the
                       status of the RAM block.
                       true: Initial block write protection is enabled. false: Initial block write
                       protection is disabled.
 Multiplicity          1
 Type                  EcucBooleanParamDef
 Default Value
 Post-Build Variant    false
 Value
 Value Configuration   Pre-compile time                 X    VARIANT-PRE-COMPILE
 Class
                       Link time                        X    VARIANT-LINK-TIME
                       Post-build time                  
 Scope / Dependency    scope: local
                       true: CRC will be (re)calculated for this permanent RAM block. false:
                       CRC will not be (re)calculated for this permanent RAM block.
 Multiplicity          0..1
 Type                  EcucBooleanParamDef
 Default Value
 Post-Build Variant    false
 Multiplicity
 Post-Build Variant    false
 Value
 Multiplicity          Pre-compile time                X    VARIANT-PRE-COMPILE
 Configuration Class
                       Link time                       X    VARIANT-LINK-TIME
                       Post-build time                 
 Value Configuration   Pre-compile time                X    VARIANT-PRE-COMPILE
 Class
                       Link time              X VARIANT-LINK-TIME
                       Post-build time        
 Scope / Dependency    scope: local
                       dependency: NVM_BLOCK_USE_CRC
                       Reserved NVRAM block IDs: 0 -> to derive multi block request results
                       via NvM_GetErrorStatus 1 -> redundant NVRAM block which holds the
                       configuration ID (generation tool should check that this block is
                       correctly configured from type,CRC and size point of view)
 Multiplicity          1
 Type                  EcucIntegerParamDef (Symbolic Name generated for this parameter)
 Range                 1 .. 65535
 Default Value
 Post-Build Variant    false
 Value
 Value Configuration   Pre-compile time               X   All Variants
 Class
                       Link time              
                       Post-build time        
 Scope / Dependency    scope: local
                       dependency: NVM_DATASET_SELECTION_BITS
                       true: Defines write protection after first write is enabled. false: Defines
                       write protection after first write is disabled.
 Multiplicity          1
 Type                  EcucBooleanParamDef
 Default Value
 Post-Build Variant    false
 Value
 Value Configuration   Pre-compile time                X    VARIANT-PRE-COMPILE
 Class
                       Link time                       X    VARIANT-LINK-TIME
                       Post-build time                 
 Scope / Dependency    scope: local
 Included Containers
 Container Name             Multiplicity   Scope / Dependency
 NvMTargetBlock                  1         This parameter is just a container for the parameters for
 Reference                                 EA and FEE
E.5 Os
E.5.1 OsAlarm
 Included Containers
 Container Name         Multiplicity   Scope / Dependency
 OsAlarmAction               1         This container defines which type of notification is used
                                       when the alarm expires.
 OsAlarmAutostart           0..1       If present this container defines if an alarm is started
                                       automatically at system start-up depending on the
                                       application mode.
E.5.2 OsApplication
 Included Containers
 Container Name             Multiplicity   Scope / Dependency
 OsApplicationHooks              1         Container to structure the OS-Application-specific hooks
 OsApplicationTrusted          0..*        Container to structure the configuration parameters of
 Function                                  trusted functions
E.5.3 OsCounter
 Included Containers
 Container Name             Multiplicity   Scope / Dependency
 OsDriver                      0..1        This Container contains the information who will drive
                                           the counter. This configuration is only valid if the counter
                                           has OsCounterType set to HARDWARE.
E.5.4 OsEvent
No Included Containers
E.5.5 OsScheduleTable
                       false: the schedule table processing stops when the final expiry point is
                       processed.
 Multiplicity          1
 Type                  EcucBooleanParamDef
 Default Value
 Post-Build Variant    false
 Value
 Value Configuration   Pre-compile time               X    All Variants
 Class
                       Link time                      
                       Post-build time                
 Scope / Dependency    scope: ECU
 Included Containers
 Container Name             Multiplicity   Scope / Dependency
 OsScheduleTable               0..1        This container specifies if and how the schedule table is
 Autostart                                 started on startup of the Operating System. The options
                                           to start a schedule table correspond to the API calls to
                                           start schedule tables during runtime.
 OsScheduleTableExpiry          1..*       The point on a Schedule Table at which the OS activates
 Point                                     tasks and/or sets events
 OsScheduleTableSync            0..1       This container specifies the synchronization parameters
                                           of the schedule table.
E.5.6 OsScheduleTableExpiryPoint
 Included Containers
 Container Name             Multiplicity   Scope / Dependency
 OsScheduleTableEvent          0..*        Event that is triggered by that schedule table.
 Setting
 OsScheduleTableTask            0..*       Task that is triggered by that schedule table.
 Activation
 OsScheduleTbl                  0..1       Adjustable expiry point
 AdjustableExpPoint
E.5.7 OsTask
 Included Containers
 Container Name           Multiplicity   Scope / Dependency
 OsTaskAutostart             0..1        This container determines whether the task is activated
                                         during the system start-up procedure or not for some
                                         specific application modes.
F     Examples
This chapter contains more detailed information for examples which were shown inside
the preceding chapters of the specification.
F.1   ModeDeclarationGroupMapping
The example for Mapping of ModeDeclarations in chapter 4.4.10 is based on the
following ARXML:
      <?xml version="1.0" encoding="UTF-8"?>
      <AUTOSAR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="
         http://autosar.org/schema/r4.0" xsi:schemaLocation="http://autosar.
         org/schema/r4.0 AUTOSAR_4-2-1.xsd">
        <AR-PACKAGES>
          <AR-PACKAGE>
            <SHORT-NAME>Demo</SHORT-NAME>
            <DESC>
              <L-2 L="EN">Example about Connection of Mode Managers and Mode
                 Users with different number of ModeDeclarations</L-2>
            </DESC>
            <CATEGORY>EXAMPLE</CATEGORY>
            <AR-PACKAGES>
              <AR-PACKAGE>
                <SHORT-NAME>SwComponentTypes</SHORT-NAME>
                <ELEMENTS>
                  <APPLICATION-SW-COMPONENT-TYPE>
                    <SHORT-NAME>ModeManager</SHORT-NAME>
                    <PORTS>
                       <P-PORT-PROTOTYPE>
                         <SHORT-NAME>EcuState</SHORT-NAME>
                         <PROVIDED-COM-SPECS>
                           <MODE-SWITCH-SENDER-COM-SPEC>
                             <ENHANCED-MODE-API>true</ENHANCED-MODE-API>
                             <MODE-GROUP-REF DEST="MODE-DECLARATION-GROUP-
                                PROTOTYPE">/Demo/PortInterfaces/
                                EcuStatesExtended/EcuStatesExtended</MODE-
                                GROUP-REF>
                             <QUEUE-LENGTH>1</QUEUE-LENGTH>
                           </MODE-SWITCH-SENDER-COM-SPEC>
                         </PROVIDED-COM-SPECS>
                         <PROVIDED-INTERFACE-TREF DEST="MODE-SWITCH-INTERFACE"
                            >/Demo/PortInterfaces/EcuStatesExtended</PROVIDED
                            -INTERFACE-TREF>
                       </P-PORT-PROTOTYPE>
                    </PORTS>
                  </APPLICATION-SW-COMPONENT-TYPE>
                  <APPLICATION-SW-COMPONENT-TYPE>
                    <SHORT-NAME>ModeUser</SHORT-NAME>
                    <PORTS>
                       <R-PORT-PROTOTYPE>
                         <SHORT-NAME>EcuState</SHORT-NAME>
                         <REQUIRED-COM-SPECS>
                            <MODE-SWITCH-RECEIVER-COM-SPEC>
                              <ENHANCED-MODE-API>1</ENHANCED-MODE-API>
                              <SUPPORTS-ASYNCHRONOUS-MODE-SWITCH>false</
                                 SUPPORTS-ASYNCHRONOUS-MODE-SWITCH>
                            </MODE-SWITCH-RECEIVER-COM-SPEC>
                         </REQUIRED-COM-SPECS>
                         <REQUIRED-INTERFACE-TREF DEST="MODE-SWITCH-INTERFACE"
                             >/Demo/PortInterfaces/EcuStatesBasic</REQUIRED-
                             INTERFACE-TREF>
                       </R-PORT-PROTOTYPE>
                     </PORTS>
                   </APPLICATION-SW-COMPONENT-TYPE>
                   <COMPOSITION-SW-COMPONENT-TYPE>
                     <SHORT-NAME>DemoEcu</SHORT-NAME>
                     <COMPONENTS>
                       <SW-COMPONENT-PROTOTYPE>
                         <SHORT-NAME>ModeManager</SHORT-NAME>
                         <TYPE-TREF DEST="APPLICATION-SW-COMPONENT-TYPE">/Demo
                             /SwComponentTypes/ModeManager</TYPE-TREF>
                       </SW-COMPONENT-PROTOTYPE>
                       <SW-COMPONENT-PROTOTYPE>
                         <SHORT-NAME>ModeUser</SHORT-NAME>
                         <TYPE-TREF DEST="APPLICATION-SW-COMPONENT-TYPE">/Demo
                             /SwComponentTypes/ModeUser</TYPE-TREF>
                       </SW-COMPONENT-PROTOTYPE>
                     </COMPONENTS>
                     <CONNECTORS>
                       <ASSEMBLY-SW-CONNECTOR>
                         <SHORT-NAME>ModeManager_EcuState_ModeUser_EcuState</
                             SHORT-NAME>
                         <MAPPING-REF DEST="MODE-INTERFACE-MAPPING">/Demo/
                             PortInterfaceMappingSets/
                             ModeSwitchInterfaceMapping/
                             EcuStatesExtended_2_EcuStatesBasic</MAPPING-REF>
                         <PROVIDER-IREF>
                            <CONTEXT-COMPONENT-REF DEST="SW-COMPONENT-PROTOTYPE
                               ">/Demo/SwComponentTypes/DemoEcu/ModeManager</
                               CONTEXT-COMPONENT-REF>
                            <TARGET-P-PORT-REF DEST="P-PORT-PROTOTYPE">/Demo/
                               SwComponentTypes/ModeManager/EcuState</TARGET-P
                               -PORT-REF>
                         </PROVIDER-IREF>
                         <REQUESTER-IREF>
                            <CONTEXT-COMPONENT-REF DEST="SW-COMPONENT-PROTOTYPE
                               ">/Demo/SwComponentTypes/DemoEcu/ModeUser</
                               CONTEXT-COMPONENT-REF>
                            <TARGET-R-PORT-REF DEST="R-PORT-PROTOTYPE">/Demo/
                               SwComponentTypes/ModeUser/EcuState</TARGET-R-
                               PORT-REF>
                         </REQUESTER-IREF>
                       </ASSEMBLY-SW-CONNECTOR>
                     </CONNECTORS>
                   </COMPOSITION-SW-COMPONENT-TYPE>
                 </ELEMENTS>
               </AR-PACKAGE>
               <AR-PACKAGE>
                 <SHORT-NAME>PortInterfaces</SHORT-NAME>
                 <ELEMENTS>
                   <MODE-SWITCH-INTERFACE>
                     <SHORT-NAME>EcuStatesBasic</SHORT-NAME>
                     <MODE-GROUP>
                       <SHORT-NAME>EcuStatesBasic</SHORT-NAME>
                       <SW-CALIBRATION-ACCESS>READ-ONLY</SW-CALIBRATION-ACCESS
                          >
                       <TYPE-TREF DEST="MODE-DECLARATION-GROUP">/Demo/
                          ModeDeclarationGroups/EcuStatesBasic</TYPE-TREF>
                     </MODE-GROUP>
                   </MODE-SWITCH-INTERFACE>
                   <MODE-SWITCH-INTERFACE>
                     <SHORT-NAME>EcuStatesExtended</SHORT-NAME>
                     <MODE-GROUP>
                       <SHORT-NAME>EcuStatesExtended</SHORT-NAME>
                       <SW-CALIBRATION-ACCESS>READ-ONLY</SW-CALIBRATION-ACCESS
                          >
                       <TYPE-TREF DEST="MODE-DECLARATION-GROUP">/Demo/
                          ModeDeclarationGroups/EcuStatesExtended</TYPE-TREF>
                     </MODE-GROUP>
                   </MODE-SWITCH-INTERFACE>
                 </ELEMENTS>
               </AR-PACKAGE>
               <AR-PACKAGE>
                 <SHORT-NAME>ModeDeclarationGroups</SHORT-NAME>
                 <ELEMENTS>
                   <MODE-DECLARATION-GROUP>
                     <SHORT-NAME>EcuStatesBasic</SHORT-NAME>
                     <CATEGORY>EXPLICIT_ORDER</CATEGORY>
                     <INITIAL-MODE-REF DEST="MODE-DECLARATION">/Demo/
                        ModeDeclarationGroups/EcuStatesBasic/STARTUP</INITIAL
                        -MODE-REF>
                     <MODE-DECLARATIONS>
                       <MODE-DECLARATION>
                         <SHORT-NAME>STARTUP</SHORT-NAME>
                         <DESC>
                           <L-2 L="EN">Startup phase of the Ecu</L-2>
                         </DESC>
                         <VALUE>1</VALUE>
                       </MODE-DECLARATION>
                       <MODE-DECLARATION>
                         <SHORT-NAME>RUN</SHORT-NAME>
                         <DESC>
                           <L-2 L="EN">Run phase of the Ecu</L-2>
                         </DESC>
                         <VALUE>2</VALUE>
                       </MODE-DECLARATION>
                       <MODE-DECLARATION>
                         <SHORT-NAME>POST_RUN</SHORT-NAME>
                         <DESC>
                           <L-2 L="EN">post run phase of the Ecu</L-2>
                         </DESC>
                         <VALUE>3</VALUE>
                       </MODE-DECLARATION>
                   <MODE-DECLARATION>
                     <SHORT-NAME>SHUTDOWN</SHORT-NAME>
                     <DESC>
                       <L-2 L="EN">shutdown phase of the Ecu</L-2>
                     </DESC>
                     <VALUE>4</VALUE>
                   </MODE-DECLARATION>
                 </MODE-DECLARATIONS>
                 <MODE-TRANSITIONS>
                 <MODE-TRANSITION>
                   <SHORT-NAME>STARTUP_RUN</SHORT-NAME>
                   <ENTERED-MODE-REF DEST="MODE-DECLARATION">/Demo/
                      ModeDeclarationGroups/EcuStatesBasic/RUN</ENTERED-
                      MODE-REF>
                   <EXITED-MODE-REF DEST="MODE-DECLARATION">/Demo/
                      ModeDeclarationGroups/EcuStatesBasic/STARTUP</
                      EXITED-MODE-REF>
                 </MODE-TRANSITION>
                 <MODE-TRANSITION>
                   <SHORT-NAME>STARTUP_POST_RUN</SHORT-NAME>
                   <ENTERED-MODE-REF DEST="MODE-DECLARATION">/Demo/
                      ModeDeclarationGroups/EcuStatesBasic/POST_RUN</
                      ENTERED-MODE-REF>
                   <EXITED-MODE-REF DEST="MODE-DECLARATION">/Demo/
                      ModeDeclarationGroups/EcuStatesBasic/STARTUP</
                      EXITED-MODE-REF>
                 </MODE-TRANSITION>
                 <MODE-TRANSITION>
                   <SHORT-NAME>RUN_POST_RUN</SHORT-NAME>
                   <ENTERED-MODE-REF DEST="MODE-DECLARATION">/Demo/
                      ModeDeclarationGroups/EcuStatesBasic/POST_RUN</
                      ENTERED-MODE-REF>
                   <EXITED-MODE-REF DEST="MODE-DECLARATION">/Demo/
                      ModeDeclarationGroups/EcuStatesBasic/RUN</EXITED-
                      MODE-REF>
                 </MODE-TRANSITION>
                 <MODE-TRANSITION>
                   <SHORT-NAME>POST_RUN_SHUTDOWN</SHORT-NAME>
                   <ENTERED-MODE-REF DEST="MODE-DECLARATION">/Demo/
                      ModeDeclarationGroups/EcuStatesBasic/SHUTDOWN</
                      ENTERED-MODE-REF>
                   <EXITED-MODE-REF DEST="MODE-DECLARATION">/Demo/
                      ModeDeclarationGroups/EcuStatesBasic/POST_RUN</
                      EXITED-MODE-REF>
                 </MODE-TRANSITION>
                 </MODE-TRANSITIONS>
                 <ON-TRANSITION-VALUE>0</ON-TRANSITION-VALUE>
               </MODE-DECLARATION-GROUP>
               <MODE-DECLARATION-GROUP>
                 <SHORT-NAME>EcuStatesExtended</SHORT-NAME>
                 <CATEGORY>ALPHABETIC_ORDER</CATEGORY>
                 <INITIAL-MODE-REF DEST="MODE-DECLARATION">/Demo/
                    ModeDeclarationGroups/EcuStatesExtended/StartUp</
                    INITIAL-MODE-REF>
                 <MODE-DECLARATIONS>
                   <MODE-DECLARATION>
                         <SHORT-NAME>StartUp</SHORT-NAME>
                         <DESC>
                            <L-2 L="EN">Start up phase of the Ecu</L-2>
                         </DESC>
                       </MODE-DECLARATION>
                       <MODE-DECLARATION>
                         <SHORT-NAME>Run</SHORT-NAME>
                         <DESC>
                            <L-2 L="EN">Run phase of the Ecu</L-2>
                         </DESC>
                       </MODE-DECLARATION>
                       <MODE-DECLARATION>
                         <SHORT-NAME>PostRun1</SHORT-NAME>
                         <DESC>
                            <L-2 L="EN">First post run phase of the Ecu</L-2>
                         </DESC>
                       </MODE-DECLARATION>
                       <MODE-DECLARATION>
                         <SHORT-NAME>PostRun2</SHORT-NAME>
                         <DESC>
                            <L-2 L="EN">Second post run phase of the Ecu</L-2>
                         </DESC>
                       </MODE-DECLARATION>
                       <MODE-DECLARATION>
                         <SHORT-NAME>ShutDown</SHORT-NAME>
                         <DESC>
                            <L-2 L="EN">Shut down phase of the Ecu</L-2>
                         </DESC>
                       </MODE-DECLARATION>
                       <MODE-DECLARATION>
                         <SHORT-NAME>Sleep</SHORT-NAME>
                         <DESC>
                            <L-2 L="EN">Sleep mode of the Ecu with reduced
                               functionality</L-2>
                         </DESC>
                       </MODE-DECLARATION>
                       <MODE-DECLARATION>
                         <SHORT-NAME>Hibernate</SHORT-NAME>
                         <DESC>
                            <L-2 L="EN">Hibernate mode of the Ecu with extreme
                               reduced functionality</L-2>
                         </DESC>
                       </MODE-DECLARATION>
                     </MODE-DECLARATIONS>
                   </MODE-DECLARATION-GROUP>
                 </ELEMENTS>
               </AR-PACKAGE>
               <AR-PACKAGE>
                 <SHORT-NAME>PortInterfaceMappingSets</SHORT-NAME>
                 <ELEMENTS>
                   <MODE-DECLARATION-MAPPING-SET>
                     <SHORT-NAME>EcuStateMapping</SHORT-NAME>
                     <MODE-DECLARATION-MAPPINGS>
                       <MODE-DECLARATION-MAPPING>
                         <SHORT-NAME>StartUp_2_STARTUP_</SHORT-NAME>
                         <FIRST-MODE-REFS>
                   <FIRST-MODE-REF DEST="MODE-DECLARATION">/Demo/
                      ModeDeclarationGroups/EcuStatesExtended/StartUp
                      </FIRST-MODE-REF>
                 </FIRST-MODE-REFS>
                 <SECOND-MODE-REF DEST="MODE-DECLARATION">/Demo/
                    ModeDeclarationGroups/EcuStatesBasic/STARTUP</
                    SECOND-MODE-REF>
               </MODE-DECLARATION-MAPPING>
               <MODE-DECLARATION-MAPPING>
                 <SHORT-NAME>Run_2_RUN</SHORT-NAME>
                 <FIRST-MODE-REFS>
                   <FIRST-MODE-REF DEST="MODE-DECLARATION">/Demo/
                      ModeDeclarationGroups/EcuStatesExtended/Run</
                      FIRST-MODE-REF>
                 </FIRST-MODE-REFS>
                 <SECOND-MODE-REF DEST="MODE-DECLARATION">/Demo/
                    ModeDeclarationGroups/EcuStatesBasic/RUN</SECOND-
                    MODE-REF>
               </MODE-DECLARATION-MAPPING>
               <MODE-DECLARATION-MAPPING>
                 <SHORT-NAME>PostRunX_2_POST_RUN</SHORT-NAME>
                 <FIRST-MODE-REFS>
                   <FIRST-MODE-REF DEST="MODE-DECLARATION">/Demo/
                      ModeDeclarationGroups/EcuStatesExtended/
                      PostRun1</FIRST-MODE-REF>
                   <FIRST-MODE-REF DEST="MODE-DECLARATION">/Demo/
                      ModeDeclarationGroups/EcuStatesExtended/
                      PostRun2</FIRST-MODE-REF>
                 </FIRST-MODE-REFS>
                 <SECOND-MODE-REF DEST="MODE-DECLARATION">/Demo/
                    ModeDeclarationGroups/EcuStatesBasic/POST_RUN</
                    SECOND-MODE-REF>
               </MODE-DECLARATION-MAPPING>
               <MODE-DECLARATION-MAPPING>
                 <SHORT-NAME>ShutDown_2_SHUTDOWN</SHORT-NAME>
                 <FIRST-MODE-REFS>
                   <FIRST-MODE-REF DEST="MODE-DECLARATION">/Demo/
                      ModeDeclarationGroups/EcuStatesExtended/
                      ShutDown</FIRST-MODE-REF>
                 </FIRST-MODE-REFS>
                 <SECOND-MODE-REF DEST="MODE-DECLARATION">/Demo/
                    ModeDeclarationGroups/EcuStatesBasic/SHUTDOWN</
                    SECOND-MODE-REF>
               </MODE-DECLARATION-MAPPING>
               <MODE-DECLARATION-MAPPING>
                 <SHORT-NAME>Sleep_Hibernate_2_SHUTDOWN</SHORT-NAME>
                 <FIRST-MODE-REFS>
                   <FIRST-MODE-REF DEST="MODE-DECLARATION">/Demo/
                      ModeDeclarationGroups/EcuStatesExtended/Sleep</
                      FIRST-MODE-REF>
                   <FIRST-MODE-REF DEST="MODE-DECLARATION">/Demo/
                      ModeDeclarationGroups/EcuStatesExtended/
                      Hibernate</FIRST-MODE-REF>
                 </FIRST-MODE-REFS>
                         <SECOND-MODE-REF DEST="MODE-DECLARATION">/Demo/
                             ModeDeclarationGroups/EcuStatesBasic/SHUTDOWN</
                             SECOND-MODE-REF>
                       </MODE-DECLARATION-MAPPING>
                     </MODE-DECLARATION-MAPPINGS>
                   </MODE-DECLARATION-MAPPING-SET>
                   <PORT-INTERFACE-MAPPING-SET>
                     <SHORT-NAME>ModeSwitchInterfaceMapping</SHORT-NAME>
                     <PORT-INTERFACE-MAPPINGS>
                       <MODE-INTERFACE-MAPPING>
                         <SHORT-NAME>EcuStatesExtended_2_EcuStatesBasic</SHORT
                             -NAME>
                         <MODE-MAPPING>
                           <FIRST-MODE-GROUP-REF DEST="MODE-DECLARATION-GROUP-
                               PROTOTYPE">/Demo/PortInterfaces/
                               EcuStatesExtended/EcuStatesExtended</FIRST-MODE
                               -GROUP-REF>
                           <MODE-DECLARATION-MAPPING-SET-REF DEST="MODE-
                               DECLARATION-MAPPING-SET">/Demo/
                               PortInterfaceMappingSets/EcuStateMapping</MODE-
                               DECLARATION-MAPPING-SET-REF>
                           <SECOND-MODE-GROUP-REF DEST="MODE-DECLARATION-GROUP
                               -PROTOTYPE">/Demo/PortInterfaces/EcuStatesBasic
                               /EcuStatesBasic</SECOND-MODE-GROUP-REF>
                         </MODE-MAPPING>
                       </MODE-INTERFACE-MAPPING>
                     </PORT-INTERFACE-MAPPINGS>
                   </PORT-INTERFACE-MAPPING-SET>
                 </ELEMENTS>
              </AR-PACKAGE>
            </AR-PACKAGES>
          </AR-PACKAGE>
        </AR-PACKAGES>
      </AUTOSAR>
               <SHORT-NAME>COMP_1</SHORT-NAME>
               <DESC><L-2 L="EN">Stability need for received data (see
                  SWS RTE)</L-2></DESC>
               <CONSISTENCY-NEEDSS>
               <CONSISTENCY-NEEDS>
                 <SHORT-NAME>CN_BC</SHORT-NAME>
                 <DPG-DOES-NOT-REQUIRE-COHERENCYS>
                 <DATA-PROTOTYPE-GROUP>
                   <SHORT-NAME>CN_BC_DG1</SHORT-NAME>
                   <IMPLICIT-DATA-ACCESS-IREFS>
                   <IMPLICIT-DATA-ACCESS-IREF>
                   <CONTEXT-SW-COMPONENT-PROTOTYPE-REF DEST="SW-
                      COMPONENT-PROTOTYPE">/Demo/SwComponentTypes/
                      COMP_1/ASWC_B</CONTEXT-SW-COMPONENT-PROTOTYPE-REF
                      >
                   <CONTEXT-PORT-PROTOTYPE-REF DEST="R-PORT-PROTOTYPE">/
                      Demo/SwComponentTypes/ASWC_B/A</CONTEXT-PORT-
                      PROTOTYPE-REF>
                   <TARGET-VARIABLE-DATA-PROTOTYPE-REF DEST="VARIABLE-
                      DATA-PROTOTYPE">/Demo/PortInterfaces/A/A</TARGET-
                      VARIABLE-DATA-PROTOTYPE-REF>
                   </IMPLICIT-DATA-ACCESS-IREF>
                  <IMPLICIT-DATA-ACCESS-IREF>
                  <CONTEXT-SW-COMPONENT-PROTOTYPE-REF DEST="SW-
                     COMPONENT-PROTOTYPE">/Demo/SwComponentTypes/
                     COMP_1/ASWC_C</CONTEXT-SW-COMPONENT-PROTOTYPE-REF
                     >
                  <CONTEXT-PORT-PROTOTYPE-REF DEST="R-PORT-PROTOTYPE">/
                     Demo/SwComponentTypes/ASWC_C/A</CONTEXT-PORT-
                     PROTOTYPE-REF>
                  <TARGET-VARIABLE-DATA-PROTOTYPE-REF DEST="VARIABLE-
                     DATA-PROTOTYPE">/Demo/PortInterfaces/A/A</TARGET-
                     VARIABLE-DATA-PROTOTYPE-REF>
                  </IMPLICIT-DATA-ACCESS-IREF>
                  <IMPLICIT-DATA-ACCESS-IREF>
                  <CONTEXT-SW-COMPONENT-PROTOTYPE-REF DEST="SW-
                     COMPONENT-PROTOTYPE">/Demo/SwComponentTypes/
                     COMP_1/ASWC_B</CONTEXT-SW-COMPONENT-PROTOTYPE-REF
                     >
                  <CONTEXT-PORT-PROTOTYPE-REF DEST="R-PORT-PROTOTYPE">/
                     Demo/SwComponentTypes/ASWC_B/B</CONTEXT-PORT-
                     PROTOTYPE-REF>
                  <TARGET-VARIABLE-DATA-PROTOTYPE-REF DEST="VARIABLE-
                     DATA-PROTOTYPE">/Demo/PortInterfaces/B/B</TARGET-
                     VARIABLE-DATA-PROTOTYPE-REF>
                  </IMPLICIT-DATA-ACCESS-IREF>
                  <IMPLICIT-DATA-ACCESS-IREF>
                  <CONTEXT-SW-COMPONENT-PROTOTYPE-REF DEST="SW-
                     COMPONENT-PROTOTYPE">/Demo/SwComponentTypes/
                     COMP_1/ASWC_C</CONTEXT-SW-COMPONENT-PROTOTYPE-REF
                     >
                     <CONTEXT-PORT-PROTOTYPE-REF DEST="R-PORT-PROTOTYPE">/
                        Demo/SwComponentTypes/ASWC_C/B</CONTEXT-PORT-
                        PROTOTYPE-REF>
                     <TARGET-VARIABLE-DATA-PROTOTYPE-REF DEST="VARIABLE-
                        DATA-PROTOTYPE">/Demo/PortInterfaces/B/B</TARGET-
                        VARIABLE-DATA-PROTOTYPE-REF>
                     </IMPLICIT-DATA-ACCESS-IREF>
                     </IMPLICIT-DATA-ACCESS-IREFS>
                   </DATA-PROTOTYPE-GROUP>
                   </DPG-DOES-NOT-REQUIRE-COHERENCYS>
                   <REG-REQUIRES-STABILITYS>
                   <RUNNABLE-ENTITY-GROUP>
                     <SHORT-NAME>CN_BC_RG1</SHORT-NAME>
                     <RUNNABLE-ENTITY-IREFS>
                     <RUNNABLE-ENTITY-IREF>
                     <CONTEXT-SW-COMPONENT-PROTOTYPE-REF DEST="SW-
                        COMPONENT-PROTOTYPE">/Demo/SwComponentTypes/
                        COMP_1/ASWC_B</CONTEXT-SW-COMPONENT-PROTOTYPE-REF
                        >
                     <TARGET-RUNNABLE-ENTITY-REF DEST="RUNNABLE-ENTITY">/
                        Demo/SwComponentTypes/ASWC_B/IB_ASWC_B/
                        ASWC_B_RUN1</TARGET-RUNNABLE-ENTITY-REF>
                     </RUNNABLE-ENTITY-IREF>
                     <RUNNABLE-ENTITY-IREF>
                     <CONTEXT-SW-COMPONENT-PROTOTYPE-REF DEST="SW-
                        COMPONENT-PROTOTYPE">/Demo/SwComponentTypes/
                        COMP_1/ASWC_C</CONTEXT-SW-COMPONENT-PROTOTYPE-REF
                        >
                     <TARGET-RUNNABLE-ENTITY-REF DEST="RUNNABLE-ENTITY">/
                        Demo/SwComponentTypes/ASWC_C/IB_ASWC_C/
                        ASWC_C_RUN1</TARGET-RUNNABLE-ENTITY-REF>
                     </RUNNABLE-ENTITY-IREF>
                     </RUNNABLE-ENTITY-IREFS>
                   </RUNNABLE-ENTITY-GROUP>
                   </REG-REQUIRES-STABILITYS>
                 </CONSISTENCY-NEEDS>
                 </CONSISTENCY-NEEDSS>
                 <COMPONENTS>
                   <SW-COMPONENT-PROTOTYPE>
                     <SHORT-NAME>ASWC_A</SHORT-NAME>
                     <TYPE-TREF DEST="APPLICATION-SW-COMPONENT-TYPE">/Demo
                        /SwComponentTypes/ASWC_A</TYPE-TREF>
                   </SW-COMPONENT-PROTOTYPE>
                   <SW-COMPONENT-PROTOTYPE>
                     <SHORT-NAME>ASWC_B</SHORT-NAME>
                     <TYPE-TREF DEST="APPLICATION-SW-COMPONENT-TYPE">/Demo
                        /SwComponentTypes/ASWC_B</TYPE-TREF>
                   </SW-COMPONENT-PROTOTYPE>
                   <SW-COMPONENT-PROTOTYPE>
                     <SHORT-NAME>ASWC_C</SHORT-NAME>
                     <TYPE-TREF DEST="APPLICATION-SW-COMPONENT-TYPE">/Demo
                        /SwComponentTypes/ASWC_C</TYPE-TREF>
                   </SW-COMPONENT-PROTOTYPE>
                 </COMPONENTS>
               </COMPOSITION-SW-COMPONENT-TYPE>
               <APPLICATION-SW-COMPONENT-TYPE>
                 <SHORT-NAME>ASWC_A</SHORT-NAME>
                 <PORTS>
                   <P-PORT-PROTOTYPE>
                     <SHORT-NAME>A</SHORT-NAME>
                     <PROVIDED-INTERFACE-TREF DEST="SENDER-RECEIVER-
                         INTERFACE">/Demo/PortInterfaces/A</PROVIDED-
                         INTERFACE-TREF>
                   </P-PORT-PROTOTYPE>
                   <P-PORT-PROTOTYPE>
                     <SHORT-NAME>B</SHORT-NAME>
                     <PROVIDED-INTERFACE-TREF DEST="SENDER-RECEIVER-
                         INTERFACE">/Demo/PortInterfaces/B</PROVIDED-
                         INTERFACE-TREF>
                   </P-PORT-PROTOTYPE>
                 </PORTS>
                 <INTERNAL-BEHAVIORS>
                   <SWC-INTERNAL-BEHAVIOR>
                     <SHORT-NAME>IB_ASWC_A</SHORT-NAME>
                     <RUNNABLES>
                       <RUNNABLE-ENTITY>
                          <SHORT-NAME>ASWC_A_RUN1</SHORT-NAME>
                          <DATA-WRITE-ACCESSS>
                            <VARIABLE-ACCESS>
                              <SHORT-NAME>DWP_ASWC_A_RUN1_A_A</SHORT-NAME>
                              <ACCESSED-VARIABLE>
                                <AUTOSAR-VARIABLE-IREF>
                                  <PORT-PROTOTYPE-REF DEST="P-PORT-
                                     PROTOTYPE">/Demo/SwComponentTypes/
                                     ASWC_A/A</PORT-PROTOTYPE-REF>
                                  <TARGET-DATA-PROTOTYPE-REF DEST="VARIABLE
                                     -DATA-PROTOTYPE">/Demo/PortInterfaces
                                     /A/A</TARGET-DATA-PROTOTYPE-REF>
                                </AUTOSAR-VARIABLE-IREF>
                              </ACCESSED-VARIABLE>
                            </VARIABLE-ACCESS>
                            <VARIABLE-ACCESS>
                              <SHORT-NAME>DWP_ASWC_A_RUN1_B_B</SHORT-NAME>
                              <ACCESSED-VARIABLE>
                                <AUTOSAR-VARIABLE-IREF>
                                  <PORT-PROTOTYPE-REF DEST="P-PORT-
                                     PROTOTYPE">/Demo/SwComponentTypes/
                                     ASWC_A/B</PORT-PROTOTYPE-REF>
                                  <TARGET-DATA-PROTOTYPE-REF DEST="VARIABLE
                                     -DATA-PROTOTYPE">/Demo/PortInterfaces
                                     /B/B</TARGET-DATA-PROTOTYPE-REF>
                                </AUTOSAR-VARIABLE-IREF>
                              </ACCESSED-VARIABLE>
                            </VARIABLE-ACCESS>
                          </DATA-WRITE-ACCESSS>
                       </RUNNABLE-ENTITY>
                     </RUNNABLES>
                   </SWC-INTERNAL-BEHAVIOR>
                 </INTERNAL-BEHAVIORS>
               </APPLICATION-SW-COMPONENT-TYPE>
               <APPLICATION-SW-COMPONENT-TYPE>
                 <SHORT-NAME>ASWC_B</SHORT-NAME>
                 <PORTS>
                   <R-PORT-PROTOTYPE>
                     <SHORT-NAME>A</SHORT-NAME>
                     <REQUIRED-INTERFACE-TREF DEST="SENDER-RECEIVER-
                         INTERFACE">/Demo/PortInterfaces/A</REQUIRED-
                         INTERFACE-TREF>
                   </R-PORT-PROTOTYPE>
                   <R-PORT-PROTOTYPE>
                     <SHORT-NAME>B</SHORT-NAME>
                     <REQUIRED-INTERFACE-TREF DEST="SENDER-RECEIVER-
                         INTERFACE">/Demo/PortInterfaces/B</REQUIRED-
                         INTERFACE-TREF>
                   </R-PORT-PROTOTYPE>
                 </PORTS>
                 <INTERNAL-BEHAVIORS>
                   <SWC-INTERNAL-BEHAVIOR>
                     <SHORT-NAME>IB_ASWC_B</SHORT-NAME>
                     <RUNNABLES>
                       <RUNNABLE-ENTITY>
                          <SHORT-NAME>ASWC_B_RUN1</SHORT-NAME>
                          <DATA-READ-ACCESSS>
                            <VARIABLE-ACCESS>
                              <SHORT-NAME>DWP_ASWC_B_RUN1_A_A</SHORT-NAME>
                              <ACCESSED-VARIABLE>
                                <AUTOSAR-VARIABLE-IREF>
                                  <PORT-PROTOTYPE-REF DEST="R-PORT-
                                     PROTOTYPE">/Demo/SwComponentTypes/
                                     ASWC_B/A</PORT-PROTOTYPE-REF>
                                  <TARGET-DATA-PROTOTYPE-REF DEST="VARIABLE
                                     -DATA-PROTOTYPE">/Demo/PortInterfaces
                                     /A/A</TARGET-DATA-PROTOTYPE-REF>
                                </AUTOSAR-VARIABLE-IREF>
                              </ACCESSED-VARIABLE>
                            </VARIABLE-ACCESS>
                            <VARIABLE-ACCESS>
                              <SHORT-NAME>DWP_ASWC_B_RUN1_B_B</SHORT-NAME>
                              <ACCESSED-VARIABLE>
                                <AUTOSAR-VARIABLE-IREF>
                                  <PORT-PROTOTYPE-REF DEST="R-PORT-
                                     PROTOTYPE">/Demo/SwComponentTypes/
                                     ASWC_B/B</PORT-PROTOTYPE-REF>
                                  <TARGET-DATA-PROTOTYPE-REF DEST="VARIABLE
                                     -DATA-PROTOTYPE">/Demo/PortInterfaces
                                     /B/B</TARGET-DATA-PROTOTYPE-REF>
                                </AUTOSAR-VARIABLE-IREF>
                              </ACCESSED-VARIABLE>
                            </VARIABLE-ACCESS>
                          </DATA-READ-ACCESSS>
                       </RUNNABLE-ENTITY>
                     </RUNNABLES>
                   </SWC-INTERNAL-BEHAVIOR>
                 </INTERNAL-BEHAVIORS>
               </APPLICATION-SW-COMPONENT-TYPE>
               <APPLICATION-SW-COMPONENT-TYPE>
                 <SHORT-NAME>ASWC_C</SHORT-NAME>
                     <PORTS>
                       <R-PORT-PROTOTYPE>
                         <SHORT-NAME>A</SHORT-NAME>
                         <REQUIRED-INTERFACE-TREF DEST="SENDER-RECEIVER-
                             INTERFACE">/Demo/PortInterfaces/A</REQUIRED-
                             INTERFACE-TREF>
                       </R-PORT-PROTOTYPE>
                       <R-PORT-PROTOTYPE>
                         <SHORT-NAME>B</SHORT-NAME>
                         <REQUIRED-INTERFACE-TREF DEST="SENDER-RECEIVER-
                             INTERFACE">/Demo/PortInterfaces/B</REQUIRED-
                             INTERFACE-TREF>
                       </R-PORT-PROTOTYPE>
                     </PORTS>
                     <INTERNAL-BEHAVIORS>
                       <SWC-INTERNAL-BEHAVIOR>
                         <SHORT-NAME>IB_ASWC_C</SHORT-NAME>
                         <RUNNABLES>
                            <RUNNABLE-ENTITY>
                              <SHORT-NAME>ASWC_C_RUN1</SHORT-NAME>
                              <DATA-READ-ACCESSS>
                                <VARIABLE-ACCESS>
                                  <SHORT-NAME>DWP_ASWC_C_RUN1_A_A</SHORT-NAME>
                                  <ACCESSED-VARIABLE>
                                    <AUTOSAR-VARIABLE-IREF>
                                      <PORT-PROTOTYPE-REF DEST="R-PORT-
                                         PROTOTYPE">/Demo/SwComponentTypes/
                                         ASWC_C/A</PORT-PROTOTYPE-REF>
                                      <TARGET-DATA-PROTOTYPE-REF DEST="VARIABLE
                                         -DATA-PROTOTYPE">/Demo/PortInterfaces
                                         /A/A</TARGET-DATA-PROTOTYPE-REF>
                                    </AUTOSAR-VARIABLE-IREF>
                                  </ACCESSED-VARIABLE>
                                </VARIABLE-ACCESS>
                                <VARIABLE-ACCESS>
                                  <SHORT-NAME>DWP_ASWC_C_RUN1_B_B</SHORT-NAME>
                                  <ACCESSED-VARIABLE>
                                    <AUTOSAR-VARIABLE-IREF>
                                      <PORT-PROTOTYPE-REF DEST="R-PORT-
                                         PROTOTYPE">/Demo/SwComponentTypes/
                                         ASWC_C/B</PORT-PROTOTYPE-REF>
                                      <TARGET-DATA-PROTOTYPE-REF DEST="VARIABLE
                                         -DATA-PROTOTYPE">/Demo/PortInterfaces
                                         /B/B</TARGET-DATA-PROTOTYPE-REF>
                                    </AUTOSAR-VARIABLE-IREF>
                                  </ACCESSED-VARIABLE>
                                </VARIABLE-ACCESS>
                              </DATA-READ-ACCESSS>
                            </RUNNABLE-ENTITY>
                         </RUNNABLES>
                       </SWC-INTERNAL-BEHAVIOR>
                     </INTERNAL-BEHAVIORS>
                   </APPLICATION-SW-COMPONENT-TYPE>
                 </ELEMENTS>
               </AR-PACKAGE>
               <AR-PACKAGE>
                  <SHORT-NAME>PortInterfaces</SHORT-NAME>
                  <ELEMENTS>
                    <SENDER-RECEIVER-INTERFACE>
                      <SHORT-NAME>A</SHORT-NAME>
                      <DATA-ELEMENTS>
                        <VARIABLE-DATA-PROTOTYPE>
                          <SHORT-NAME>A</SHORT-NAME>
                        </VARIABLE-DATA-PROTOTYPE>
                      </DATA-ELEMENTS>
                    </SENDER-RECEIVER-INTERFACE>
                    <SENDER-RECEIVER-INTERFACE>
                      <SHORT-NAME>B</SHORT-NAME>
                      <DATA-ELEMENTS>
                        <VARIABLE-DATA-PROTOTYPE>
                          <SHORT-NAME>B</SHORT-NAME>
                        </VARIABLE-DATA-PROTOTYPE>
                      </DATA-ELEMENTS>
                    </SENDER-RECEIVER-INTERFACE>
                  </ELEMENTS>
               </AR-PACKAGE>
             </AR-PACKAGES>
           </AR-PACKAGE>
         </AR-PACKAGES>
       </AUTOSAR>
  24               <VT>low pressure</VT>
  25             </COMPU-CONST>
  26           </COMPU-SCALE>
  27           <COMPU-SCALE>
  28             <SHORT-LABEL>problem</SHORT-LABEL>
  29             <SYMBOL>problem_unbalanced</SYMBOL>
  30             <MASK>0b11110000</MASK>
  31             <LOWER-LIMIT INTERVAL-TYPE="CLOSED">0b00100000</LOWER-LIMIT>
  32             <UPPER-LIMIT INTERVAL-TYPE="CLOSED">0b00100000</UPPER-LIMIT>
  33             <COMPU-CONST>
  34               <VT>unbalanced</VT>
  35             </COMPU-CONST>
  36           </COMPU-SCALE>
  37           <COMPU-SCALE>
  38             <SHORT-LABEL>problem</SHORT-LABEL>
  39             <SYMBOL>problem_unknown</SYMBOL>
  40             <MASK>0b11110000</MASK>
  41             <LOWER-LIMIT INTERVAL-TYPE="CLOSED">0b00110000</LOWER-LIMIT>
  42             <UPPER-LIMIT INTERVAL-TYPE="CLOSED">0b00110000</UPPER-LIMIT>
  43             <COMPU-CONST>
  44               <VT>unknown</VT>
  45             </COMPU-CONST>
  46           </COMPU-SCALE>
  47           <COMPU-SCALE>
  48             <SHORT-LABEL>problem</SHORT-LABEL>
  49             <SYMBOL>problem_invalid</SYMBOL>
  50             <MASK>0b11110000</MASK>
  51             <LOWER-LIMIT INTERVAL-TYPE="CLOSED">0b11110000</LOWER-LIMIT>
  52             <UPPER-LIMIT INTERVAL-TYPE="CLOSED">0b11110000</UPPER-LIMIT>
  53             <COMPU-CONST>
  54               <VT>invalid</VT>
  55             </COMPU-CONST>
  56           </COMPU-SCALE>
  57           <!-- rear right -->
  58           <COMPU-SCALE>
  59             <SHORT-LABEL>rearRight</SHORT-LABEL>
  60             <SYMBOL>rearRight_no</SYMBOL>
  61             <MASK>0b11001000</MASK>
  62             <LOWER-LIMIT INTERVAL-TYPE="CLOSED">0b00000000</LOWER-LIMIT>
  63             <UPPER-LIMIT INTERVAL-TYPE="CLOSED">0b00000000</UPPER-LIMIT>
  64             <COMPU-CONST>
  65               <VT>no</VT>
  66             </COMPU-CONST>
  67           </COMPU-SCALE>
  68           <COMPU-SCALE>
  69             <SHORT-LABEL>rearRight</SHORT-LABEL>
  70             <SYMBOL>rearRight_yes</SYMBOL>
  71             <MASK>0b11001000</MASK>
  72             <LOWER-LIMIT INTERVAL-TYPE="CLOSED">0b00001000</LOWER-LIMIT>
  73             <UPPER-LIMIT INTERVAL-TYPE="CLOSED">0b00001000</UPPER-LIMIT>
  74             <COMPU-CONST>
  75               <VT>yes</VT>
  76             </COMPU-CONST>
  77           </COMPU-SCALE>
  78           <!-- rear left -->
  79           <COMPU-SCALE>
  80             <SHORT-LABEL>rearLeft</SHORT-LABEL>
  81             <SYMBOL>rearLeft_no</SYMBOL>
  82             <MASK>0b11000100</MASK>
  83             <LOWER-LIMIT INTERVAL-TYPE="CLOSED">0b00000000</LOWER-LIMIT>
  84             <UPPER-LIMIT INTERVAL-TYPE="CLOSED">0b00000000</UPPER-LIMIT>
  85             <COMPU-CONST>
  86               <VT>no</VT>
  87             </COMPU-CONST>
  88           </COMPU-SCALE>
  89           <COMPU-SCALE>
  90             <SHORT-LABEL>rearLeft</SHORT-LABEL>
  91             <SYMBOL>rearLeft_yes</SYMBOL>
  92             <MASK>0b11000100</MASK>
  93             <LOWER-LIMIT INTERVAL-TYPE="CLOSED">0b00000100</LOWER-LIMIT>
  94             <UPPER-LIMIT INTERVAL-TYPE="CLOSED">0b00000100</UPPER-LIMIT>
  95             <COMPU-CONST>
  96               <VT>yes</VT>
  97             </COMPU-CONST>
  98           </COMPU-SCALE>
  99           <!-- front right -->
 100           <COMPU-SCALE>
 101             <SHORT-LABEL>frontRight</SHORT-LABEL>
 102             <SYMBOL>frontRight_no</SYMBOL>
 103             <MASK>0b11000010</MASK>
 104             <LOWER-LIMIT INTERVAL-TYPE="CLOSED">0b00000000</LOWER-LIMIT>
 105             <UPPER-LIMIT INTERVAL-TYPE="CLOSED">0b00000000</UPPER-LIMIT>
 106             <COMPU-CONST>
 107               <VT>no</VT>
 108             </COMPU-CONST>
 109           </COMPU-SCALE>
 110           <COMPU-SCALE>
 111             <SHORT-LABEL>frontRight</SHORT-LABEL>
 112             <SYMBOL>frontRight_yes</SYMBOL>
 113             <MASK>0b11000010</MASK>
 114             <LOWER-LIMIT INTERVAL-TYPE="CLOSED">0b00000010</LOWER-LIMIT>
 115             <UPPER-LIMIT INTERVAL-TYPE="CLOSED">0b00000010</UPPER-LIMIT>
 116             <COMPU-CONST>
 117               <VT>yes</VT>
 118             </COMPU-CONST>
 119           </COMPU-SCALE>
 120           <!-- front left -->
 121           <COMPU-SCALE>
 122             <SHORT-LABEL>frontLeft</SHORT-LABEL>
 123             <SYMBOL>frontLeft_no</SYMBOL>
 124             <MASK>0b11000001</MASK>
 125             <LOWER-LIMIT INTERVAL-TYPE="CLOSED">0b00000000</LOWER-LIMIT>
 126             <UPPER-LIMIT INTERVAL-TYPE="CLOSED">0b00000000</UPPER-LIMIT>
 127             <COMPU-CONST>
 128               <VT>no</VT>
 129             </COMPU-CONST>
 130           </COMPU-SCALE>
 131           <COMPU-SCALE>
 132             <SHORT-LABEL>frontLeft</SHORT-LABEL>
 133             <SYMBOL>frontLeft_yes</SYMBOL>
 134             <MASK>0b11000001</MASK>
 135             <LOWER-LIMIT INTERVAL-TYPE="CLOSED">0b00000001</LOWER-LIMIT>
  80   #ifndef frontRight_BflMask
  81   #define frontRight_BflMask 194U
  82   #endif /* frontRight_BflMask */
  83
  84   /* [SWS_Rte_07411] unique "shortLabel" / "mask" pair "frontRight" / 0
          b11000010 but not a single contiguous bit field*/
  85
  86   /* [SWS_Rte_07412] unique "shortLabel" / "mask" pair "frontRight" / 0
          b11000010 bot not a single contiguous bit field*/
  87
  88   /* [SWS_Rte_03810] CompuScale with point range "0b00000000", symbol
          attribute "frontRight_no"*/
  89   #ifndef frontRight_no
  90   #define frontRight_no 0U
  91   #endif /* frontRight_no */
  92
  93   /* [SWS_Rte_03810] CompuScale with point range "0b00000010", symbol
          attribute "frontRight_yes"*/
  94   #ifndef frontRight_yes
  95   #define frontRight_yes 2U
  96   #endif /* frontRight_yes */
  97
  98   /* [SWS_Rte_07410] unique "shortLabel" / "mask" pair "frontLeft" / 0
          b11000001 */
  99   #ifndef frontLeft_BflMask
 100   #define frontLeft_BflMask 193U
 101   #endif /* frontLeft_BflMask */
 102
 103   /* [SWS_Rte_07411] unique "shortLabel" / "mask" pair "frontLeft" / 0
          b11000001 but not a single contiguous bit field*/
 104
 105   /* [SWS_Rte_07412] unique "shortLabel" / "mask" pair "frontLeft" / 0
          b11000001 bot not a single contiguous bit field*/
 106
 107   /* [SWS_Rte_03810] CompuScale with point range "0b00000000", symbol
          attribute "frontLeft_no"*/
 108   #ifndef frontLeft_no
 109   #define frontLeft_no 0U
 110   #endif /* frontLeft_no */
 111
 112   /* [SWS_Rte_03810] CompuScale with point range "0b00000001", symbol
          attribute "frontLeft_yes"*/
 113   #ifndef frontLeft_yes
 114   #define frontLeft_yes 1U
 115   #endif /* frontLeft_yes */
                                 <SW-DATA-DEF-PROPS>
                                   <SW-DATA-DEF-PROPS-VARIANTS>
                                     <SW-DATA-DEF-PROPS-CONDITIONAL>
                                        <IMPLEMENTATION-DATA-TYPE-REF DEST="
                                           IMPLEMENTATION-DATA-TYPE">/Demo/
                                           ImplementationDataTypes/DataSet</
                                           IMPLEMENTATION-DATA-TYPE-REF>
                                     </SW-DATA-DEF-PROPS-CONDITIONAL>
                                   </SW-DATA-DEF-PROPS-VARIANTS>
                                 </SW-DATA-DEF-PROPS>
                               </SW-POINTER-TARGET-PROPS>
                             </SW-DATA-DEF-PROPS-CONDITIONAL>
                           </SW-DATA-DEF-PROPS-VARIANTS>
                         </SW-DATA-DEF-PROPS>
                       </IMPLEMENTATION-DATA-TYPE-ELEMENT>
                       <IMPLEMENTATION-DATA-TYPE-ELEMENT>
                         <SHORT-NAME>substruct</SHORT-NAME>
                         <CATEGORY>STRUCTURE</CATEGORY>
                         <SUB-ELEMENTS>
                           <IMPLEMENTATION-DATA-TYPE-ELEMENT>
                             <SHORT-NAME>sub1</SHORT-NAME>
                             <CATEGORY>TYPE_REFERENCE</CATEGORY>
                             <SW-DATA-DEF-PROPS>
                               <SW-DATA-DEF-PROPS-VARIANTS>
                                 <SW-DATA-DEF-PROPS-CONDITIONAL>
                                   <IMPLEMENTATION-DATA-TYPE-REF DEST="
                                      IMPLEMENTATION-DATA-TYPE">/
                                      AUTOSAR_Platform/
                                      ImplementationDataTypes/uint8</
                                      IMPLEMENTATION-DATA-TYPE-REF>
                                 </SW-DATA-DEF-PROPS-CONDITIONAL>
                               </SW-DATA-DEF-PROPS-VARIANTS>
                             </SW-DATA-DEF-PROPS>
                           </IMPLEMENTATION-DATA-TYPE-ELEMENT>
                           <IMPLEMENTATION-DATA-TYPE-ELEMENT>
                             <SHORT-NAME>sub2</SHORT-NAME>
                             <CATEGORY>TYPE_REFERENCE</CATEGORY>
                             <SW-DATA-DEF-PROPS>
                               <SW-DATA-DEF-PROPS-VARIANTS>
                                 <SW-DATA-DEF-PROPS-CONDITIONAL>
                                   <IMPLEMENTATION-DATA-TYPE-REF DEST="
                                      IMPLEMENTATION-DATA-TYPE">/
                                      AUTOSAR_Platform/
                                      ImplementationDataTypes/uint8</
                                      IMPLEMENTATION-DATA-TYPE-REF>
                                 </SW-DATA-DEF-PROPS-CONDITIONAL>
                               </SW-DATA-DEF-PROPS-VARIANTS>
                             </SW-DATA-DEF-PROPS>
                           </IMPLEMENTATION-DATA-TYPE-ELEMENT>
                         </SUB-ELEMENTS>
                       </IMPLEMENTATION-DATA-TYPE-ELEMENT>
                     </SUB-ELEMENTS>
                     <TYPE-EMITTER>RTE</TYPE-EMITTER>
                   </IMPLEMENTATION-DATA-TYPE>
                 </ELEMENTS>
               </AR-PACKAGE>
             </AR-PACKAGES>
           </AR-PACKAGE>
         </AR-PACKAGES>
       </AUTOSAR>
                     <SHORT-NAME>EP</SHORT-NAME>
                     <PARAMETERS>
                       <PARAMETER-DATA-PROTOTYPE>
                         <SHORT-NAME>Prm1</SHORT-NAME>
                         <SW-DATA-DEF-PROPS>
                            <SW-DATA-DEF-PROPS-VARIANTS>
                              <SW-DATA-DEF-PROPS-CONDITIONAL>
                                <SW-ADDR-METHOD-REF DEST="SW-ADDR-METHOD">/
                                   AUTOSAR_MemMap/SwAddrMethods/CALIB_QM</SW-
                                   ADDR-METHOD-REF>
                                <SW-CALIBRATION-ACCESS>READ-WRITE</SW-
                                   CALIBRATION-ACCESS>
                                <SW-IMPL-POLICY>STANDARD</SW-IMPL-POLICY>
                              </SW-DATA-DEF-PROPS-CONDITIONAL>
                            </SW-DATA-DEF-PROPS-VARIANTS>
                         </SW-DATA-DEF-PROPS>
                         <TYPE-TREF DEST="APPLICATION-PRIMITIVE-DATA-TYPE">/
                             AUTOSAR_AISpecification/ApplicationDataTypes/Flg1
                             </TYPE-TREF>
                       </PARAMETER-DATA-PROTOTYPE>
                     </PARAMETERS>
                   </PARAMETER-INTERFACE>
                 </ELEMENTS>
               </AR-PACKAGE>
               <AR-PACKAGE>
                 <SHORT-NAME>SwComponentTypes</SHORT-NAME>
                 <ELEMENTS>
                   <PARAMETER-SW-COMPONENT-TYPE>
                     <SHORT-NAME>PSWC</SHORT-NAME>
                     <PORTS>
                       <P-PORT-PROTOTYPE>
                         <SHORT-NAME>EP</SHORT-NAME>
                         <PROVIDED-COM-SPECS>
                            <PARAMETER-PROVIDE-COM-SPEC>
                              <INIT-VALUE>
                                <APPLICATION-VALUE-SPECIFICATION>
                                  <SW-VALUE-CONT>
                                    <UNIT-REF DEST="UNIT">/AUTOSAR/
                                       AISpecification/Units/NoUnit</UNIT-REF>
                                    <SW-VALUES-PHYS>
                                      <VT>Rst</VT>
                                    </SW-VALUES-PHYS>
                                  </SW-VALUE-CONT>
                                </APPLICATION-VALUE-SPECIFICATION>
                              </INIT-VALUE>
                              <PARAMETER-REF DEST="PARAMETER-DATA-PROTOTYPE">/
                                 Demo/PortInterfaces/EP/Prm1</PARAMETER-REF>
                            </PARAMETER-PROVIDE-COM-SPEC>
                         </PROVIDED-COM-SPECS>
                         <PROVIDED-INTERFACE-TREF DEST="PARAMETER-INTERFACE">/
                             Demo/PortInterfaces/EP</PROVIDED-INTERFACE-TREF>
                       </P-PORT-PROTOTYPE>
                     </PORTS>
                   </PARAMETER-SW-COMPONENT-TYPE>
                   <APPLICATION-SW-COMPONENT-TYPE>
                     <SHORT-NAME>ASWC</SHORT-NAME>
               <PORTS>
                 <R-PORT-PROTOTYPE>
                   <SHORT-NAME>EP</SHORT-NAME>
                   <REQUIRED-INTERFACE-TREF DEST="PARAMETER-INTERFACE">/
                       Demo/PortInterfaces/EP</REQUIRED-INTERFACE-TREF>
                 </R-PORT-PROTOTYPE>
               </PORTS>
               <INTERNAL-BEHAVIORS>
                 <SWC-INTERNAL-BEHAVIOR>
                   <SHORT-NAME>ASWC</SHORT-NAME>
                   <PER-INSTANCE-PARAMETERS>
                     <PARAMETER-DATA-PROTOTYPE>
                        <SHORT-NAME>PIP</SHORT-NAME>
                        <SW-DATA-DEF-PROPS>
                          <SW-DATA-DEF-PROPS-VARIANTS>
                            <SW-DATA-DEF-PROPS-CONDITIONAL>
                              <SW-ADDR-METHOD-REF DEST="SW-ADDR-METHOD">/
                                 AUTOSAR_MemMap/SwAddrMethods/CALIB_QM</
                                 SW-ADDR-METHOD-REF>
                              <SW-CALIBRATION-ACCESS>READ-WRITE</SW-
                                 CALIBRATION-ACCESS>
                              <SW-IMPL-POLICY>STANDARD</SW-IMPL-POLICY>
                            </SW-DATA-DEF-PROPS-CONDITIONAL>
                          </SW-DATA-DEF-PROPS-VARIANTS>
                        </SW-DATA-DEF-PROPS>
                        <TYPE-TREF DEST="APPLICATION-PRIMITIVE-DATA-TYPE"
                           >/AUTOSAR_AISpecification/
                           ApplicationDataTypes/Flg1</TYPE-TREF>
                        <INIT-VALUE>
                          <APPLICATION-VALUE-SPECIFICATION>
                            <SW-VALUE-CONT>
                              <UNIT-REF DEST="UNIT">/AUTOSAR/
                                 AISpecification/Units/NoUnit</UNIT-REF>
                              <SW-VALUES-PHYS>
                                <VT>Rst</VT>
                              </SW-VALUES-PHYS>
                            </SW-VALUE-CONT>
                          </APPLICATION-VALUE-SPECIFICATION>
                        </INIT-VALUE>
                     </PARAMETER-DATA-PROTOTYPE>
                   </PER-INSTANCE-PARAMETERS>
                   <SHARED-PARAMETERS>
                     <PARAMETER-DATA-PROTOTYPE>
                        <SHORT-NAME>SP</SHORT-NAME>
                        <SW-DATA-DEF-PROPS>
                          <SW-DATA-DEF-PROPS-VARIANTS>
                            <SW-DATA-DEF-PROPS-CONDITIONAL>
                              <SW-ADDR-METHOD-REF DEST="SW-ADDR-METHOD">/
                                 AUTOSAR_MemMap/SwAddrMethods/CALIB_QM</
                                 SW-ADDR-METHOD-REF>
                              <SW-CALIBRATION-ACCESS>READ-WRITE</SW-
                                 CALIBRATION-ACCESS>
                              <SW-IMPL-POLICY>STANDARD</SW-IMPL-POLICY>
                            </SW-DATA-DEF-PROPS-CONDITIONAL>
                          </SW-DATA-DEF-PROPS-VARIANTS>
                        </SW-DATA-DEF-PROPS>
                         <TYPE-TREF DEST="APPLICATION-PRIMITIVE-DATA-TYPE"
                            >/AUTOSAR_AISpecification/
                            ApplicationDataTypes/Flg1</TYPE-TREF>
                         <INIT-VALUE>
                           <APPLICATION-VALUE-SPECIFICATION>
                              <SW-VALUE-CONT>
                                <UNIT-REF DEST="UNIT">/AUTOSAR/
                                   AISpecification/Units/NoUnit</UNIT-REF>
                                <SW-VALUES-PHYS>
                                  <VT>Set</VT>
                                </SW-VALUES-PHYS>
                              </SW-VALUE-CONT>
                           </APPLICATION-VALUE-SPECIFICATION>
                         </INIT-VALUE>
                       </PARAMETER-DATA-PROTOTYPE>
                     </SHARED-PARAMETERS>
                   </SWC-INTERNAL-BEHAVIOR>
                 </INTERNAL-BEHAVIORS>
               </APPLICATION-SW-COMPONENT-TYPE>
               <COMPOSITION-SW-COMPONENT-TYPE>
                 <SHORT-NAME>RootComp</SHORT-NAME>
                 <COMPONENTS>
                   <SW-COMPONENT-PROTOTYPE>
                     <SHORT-NAME>SWC_A</SHORT-NAME>
                     <TYPE-TREF DEST="APPLICATION-SW-COMPONENT-TYPE">/Demo
                        /SwComponentTypes/ASWC</TYPE-TREF>
                   </SW-COMPONENT-PROTOTYPE>
                   <SW-COMPONENT-PROTOTYPE>
                     <SHORT-NAME>SWC_B</SHORT-NAME>
                     <TYPE-TREF DEST="APPLICATION-SW-COMPONENT-TYPE">/Demo
                        /SwComponentTypes/ASWC</TYPE-TREF>
                   </SW-COMPONENT-PROTOTYPE>
                   <SW-COMPONENT-PROTOTYPE>
                     <SHORT-NAME>SWC_PA</SHORT-NAME>
                     <TYPE-TREF DEST="APPLICATION-SW-COMPONENT-TYPE">/Demo
                        /SwComponentTypes/PSWC</TYPE-TREF>
                   </SW-COMPONENT-PROTOTYPE>
                   <SW-COMPONENT-PROTOTYPE>
                     <SHORT-NAME>SWC_PB</SHORT-NAME>
                     <TYPE-TREF DEST="APPLICATION-SW-COMPONENT-TYPE">/Demo
                        /SwComponentTypes/PSWC</TYPE-TREF>
                   </SW-COMPONENT-PROTOTYPE>
                 </COMPONENTS>
                 <CONNECTORS>
                   <ASSEMBLY-SW-CONNECTOR>
                     <SHORT-NAME>SWC_PA_EP_SWC_A_EP</SHORT-NAME>
                     <PROVIDER-IREF>
                       <CONTEXT-COMPONENT-REF DEST="SW-COMPONENT-PROTOTYPE
                          ">/Demo/SwComponentTypes/RootComp/SWC_PA</
                          CONTEXT-COMPONENT-REF>
                       <TARGET-P-PORT-REF DEST="P-PORT-PROTOTYPE">/Demo/
                          SwComponentTypes/PSWC/EP</TARGET-P-PORT-REF>
                     </PROVIDER-IREF>
                     <REQUESTER-IREF>
                            <CONTEXT-COMPONENT-REF DEST="SW-COMPONENT-PROTOTYPE
                               ">/Demo/SwComponentTypes/RootComp/SWC_A</
                               CONTEXT-COMPONENT-REF>
                            <TARGET-R-PORT-REF DEST="R-PORT-PROTOTYPE">/Demo/
                               SwComponentTypes/ASWC/EP</TARGET-R-PORT-REF>
                         </REQUESTER-IREF>
                       </ASSEMBLY-SW-CONNECTOR>
                       <ASSEMBLY-SW-CONNECTOR>
                         <SHORT-NAME>SWC_PB_EP_SWC_B_EP</SHORT-NAME>
                         <PROVIDER-IREF>
                            <CONTEXT-COMPONENT-REF DEST="SW-COMPONENT-PROTOTYPE
                               ">/Demo/SwComponentTypes/RootComp/SWC_PB</
                               CONTEXT-COMPONENT-REF>
                            <TARGET-P-PORT-REF DEST="P-PORT-PROTOTYPE">/Demo/
                               SwComponentTypes/PSWC/EP</TARGET-P-PORT-REF>
                         </PROVIDER-IREF>
                         <REQUESTER-IREF>
                            <CONTEXT-COMPONENT-REF DEST="SW-COMPONENT-PROTOTYPE
                               ">/Demo/SwComponentTypes/RootComp/SWC_B</
                               CONTEXT-COMPONENT-REF>
                            <TARGET-R-PORT-REF DEST="R-PORT-PROTOTYPE">/Demo/
                               SwComponentTypes/ASWC/EP</TARGET-R-PORT-REF>
                         </REQUESTER-IREF>
                       </ASSEMBLY-SW-CONNECTOR>
                     </CONNECTORS>
                   </COMPOSITION-SW-COMPONENT-TYPE>
                 </ELEMENTS>
               </AR-PACKAGE>
               <AR-PACKAGE>
                 <SHORT-NAME>Systems</SHORT-NAME>
                 <ELEMENTS>
                   <SYSTEM>
                     <SHORT-NAME>Sys</SHORT-NAME>
                     <CATEGORY>ECU_EXTRACT</CATEGORY>
                     <ROOT-SOFTWARE-COMPOSITIONS>
                       <ROOT-SW-COMPOSITION-PROTOTYPE>
                         <SHORT-NAME>RootSwComp</SHORT-NAME>
                         <FLAT-MAP-REF DEST="FLAT-MAP">/Demo/FlatMaps/
                             SysFlatMap</FLAT-MAP-REF>
                         <SOFTWARE-COMPOSITION-TREF DEST="COMPOSITION-SW-
                             COMPONENT-TYPE">/Demo/SwComponentTypes/RootComp</
                             SOFTWARE-COMPOSITION-TREF>
                       </ROOT-SW-COMPOSITION-PROTOTYPE>
                     </ROOT-SOFTWARE-COMPOSITIONS>
                   </SYSTEM>
                 </ELEMENTS>
               </AR-PACKAGE>
               <AR-PACKAGE>
                 <SHORT-NAME>FlatMaps</SHORT-NAME>
                 <ELEMENTS>
                   <FLAT-MAP>
                     <SHORT-NAME>SysFlatMap</SHORT-NAME>
                     <INSTANCES>
                       <FLAT-INSTANCE-DESCRIPTOR>
                         <SHORT-NAME>SWC_A_PIP_Z0</SHORT-NAME>
                         <ECU-EXTRACT-REFERENCE-IREF>
                   <CONTEXT-ELEMENT-REF DEST="ROOT-SW-COMPOSITION-
                      PROTOTYPE">/Demo/Systems/Sys/RootSwComp</
                      CONTEXT-ELEMENT-REF>
                   <CONTEXT-ELEMENT-REF DEST="SW-COMPONENT-PROTOTYPE">
                      /Demo/SwComponentTypes/RootComp/SWC_A</CONTEXT-
                      ELEMENT-REF>
                   <TARGET-REF DEST="PARAMETER-DATA-PROTOTYPE">/Demo/
                      SwComponentTypes/ASWC/ASWC/PIP</TARGET-REF>
                 </ECU-EXTRACT-REFERENCE-IREF>
                 <VARIATION-POINT>
                   <POST-BUILD-VARIANT-CONDITIONS>
                     <POST-BUILD-VARIANT-CONDITION>
                       <MATCHING-CRITERION-REF DEST="POST-BUILD-
                          VARIANT-CRITERION">/Demo/
                          PostBuildVariantCriterions/Z</MATCHING-
                          CRITERION-REF>
                       <VALUE>0</VALUE>
                     </POST-BUILD-VARIANT-CONDITION>
                   </POST-BUILD-VARIANT-CONDITIONS>
                 </VARIATION-POINT>
               </FLAT-INSTANCE-DESCRIPTOR>
               <FLAT-INSTANCE-DESCRIPTOR>
                 <SHORT-NAME>SWC_A_PIP_Z1</SHORT-NAME>
                 <ECU-EXTRACT-REFERENCE-IREF>
                   <CONTEXT-ELEMENT-REF DEST="ROOT-SW-COMPOSITION-
                      PROTOTYPE">/Demo/Systems/Sys/RootSwComp</
                      CONTEXT-ELEMENT-REF>
                   <CONTEXT-ELEMENT-REF DEST="SW-COMPONENT-PROTOTYPE">
                      /Demo/SwComponentTypes/RootComp/SWC_A</CONTEXT-
                      ELEMENT-REF>
                   <TARGET-REF DEST="PARAMETER-DATA-PROTOTYPE">/Demo/
                      SwComponentTypes/ASWC/ASWC/PIP</TARGET-REF>
                 </ECU-EXTRACT-REFERENCE-IREF>
                 <VARIATION-POINT>
                   <POST-BUILD-VARIANT-CONDITIONS>
                     <POST-BUILD-VARIANT-CONDITION>
                       <MATCHING-CRITERION-REF DEST="POST-BUILD-
                          VARIANT-CRITERION">/Demo/
                          PostBuildVariantCriterions/Z</MATCHING-
                          CRITERION-REF>
                       <VALUE>1</VALUE>
                     </POST-BUILD-VARIANT-CONDITION>
                   </POST-BUILD-VARIANT-CONDITIONS>
                 </VARIATION-POINT>
               </FLAT-INSTANCE-DESCRIPTOR>
               <FLAT-INSTANCE-DESCRIPTOR>
                 <SHORT-NAME>SWC_B_PIP</SHORT-NAME>
                 <ECU-EXTRACT-REFERENCE-IREF>
                   <CONTEXT-ELEMENT-REF DEST="ROOT-SW-COMPOSITION-
                      PROTOTYPE">/Demo/Systems/Sys/RootSwComp</
                      CONTEXT-ELEMENT-REF>
                   <CONTEXT-ELEMENT-REF DEST="SW-COMPONENT-PROTOTYPE">
                      /Demo/SwComponentTypes/RootComp/SWC_B</CONTEXT-
                      ELEMENT-REF>
                   <TARGET-REF DEST="PARAMETER-DATA-PROTOTYPE">/Demo/
                      SwComponentTypes/ASWC/ASWC/PIP</TARGET-REF>
                 </ECU-EXTRACT-REFERENCE-IREF>
               </FLAT-INSTANCE-DESCRIPTOR>
               <FLAT-INSTANCE-DESCRIPTOR>
                 <SHORT-NAME>SWC_A_SWC_B_SP_Z0</SHORT-NAME>
                 <ECU-EXTRACT-REFERENCE-IREF>
                   <CONTEXT-ELEMENT-REF DEST="ROOT-SW-COMPOSITION-
                      PROTOTYPE">/Demo/Systems/Sys/RootSwComp</
                      CONTEXT-ELEMENT-REF>
                   <!-- points to SWC_A but applies also for SWC_B due
                       to sharedParameter behavior -->
                   <CONTEXT-ELEMENT-REF DEST="SW-COMPONENT-PROTOTYPE">
                      /Demo/SwComponentTypes/RootComp/SWC_A</CONTEXT-
                      ELEMENT-REF>
                   <TARGET-REF DEST="PARAMETER-DATA-PROTOTYPE">/Demo/
                      SwComponentTypes/ASWC/ASWC/SP</TARGET-REF>
                 </ECU-EXTRACT-REFERENCE-IREF>
                 <VARIATION-POINT>
                   <POST-BUILD-VARIANT-CONDITIONS>
                     <POST-BUILD-VARIANT-CONDITION>
                       <MATCHING-CRITERION-REF DEST="POST-BUILD-
                          VARIANT-CRITERION">/Demo/
                          PostBuildVariantCriterions/Z</MATCHING-
                          CRITERION-REF>
                       <VALUE>0</VALUE>
                     </POST-BUILD-VARIANT-CONDITION>
                   </POST-BUILD-VARIANT-CONDITIONS>
                 </VARIATION-POINT>
               </FLAT-INSTANCE-DESCRIPTOR>
               <FLAT-INSTANCE-DESCRIPTOR>
                 <SHORT-NAME>SWC_A_SWC_B_SP_Z1</SHORT-NAME>
                 <ECU-EXTRACT-REFERENCE-IREF>
                   <CONTEXT-ELEMENT-REF DEST="ROOT-SW-COMPOSITION-
                      PROTOTYPE">/Demo/Systems/Sys/RootSwComp</
                      CONTEXT-ELEMENT-REF>
                   <!-- points to SWC_A but applies also for SWC_B due
                       to sharedParameter behavior -->
                   <CONTEXT-ELEMENT-REF DEST="SW-COMPONENT-PROTOTYPE">
                      /Demo/SwComponentTypes/RootComp/SWC_A</CONTEXT-
                      ELEMENT-REF>
                   <TARGET-REF DEST="PARAMETER-DATA-PROTOTYPE">/Demo/
                      SwComponentTypes/ASWC/ASWC/SP</TARGET-REF>
                 </ECU-EXTRACT-REFERENCE-IREF>
                 <VARIATION-POINT>
                   <POST-BUILD-VARIANT-CONDITIONS>
                     <POST-BUILD-VARIANT-CONDITION>
                       <MATCHING-CRITERION-REF DEST="POST-BUILD-
                          VARIANT-CRITERION">/Demo/
                          PostBuildVariantCriterions/Z</MATCHING-
                          CRITERION-REF>
                       <VALUE>1</VALUE>
                     </POST-BUILD-VARIANT-CONDITION>
                   </POST-BUILD-VARIANT-CONDITIONS>
                 </VARIATION-POINT>
               </FLAT-INSTANCE-DESCRIPTOR>
               <FLAT-INSTANCE-DESCRIPTOR>
                 <SHORT-NAME>SWC_PA_EP_Prm1_Z0</SHORT-NAME>
                 <ECU-EXTRACT-REFERENCE-IREF>
                   <CONTEXT-ELEMENT-REF DEST="ROOT-SW-COMPOSITION-
                      PROTOTYPE">/Demo/Systems/Sys/RootSwComp</
                      CONTEXT-ELEMENT-REF>
                   <CONTEXT-ELEMENT-REF DEST="SW-COMPONENT-PROTOTYPE">
                      /Demo/SwComponentTypes/RootComp/SWC_PA</CONTEXT
                      -ELEMENT-REF>
                   <CONTEXT-ELEMENT-REF DEST="P-PORT-PROTOTYPE">/Demo/
                      SwComponentTypes/PSWC/EP</CONTEXT-ELEMENT-REF>
                   <TARGET-REF DEST="PARAMETER-DATA-PROTOTYPE">/Demo/
                      PortInterfaces/EP/Prm1</TARGET-REF>
                 </ECU-EXTRACT-REFERENCE-IREF>
                 <VARIATION-POINT>
                   <POST-BUILD-VARIANT-CONDITIONS>
                     <POST-BUILD-VARIANT-CONDITION>
                       <MATCHING-CRITERION-REF DEST="POST-BUILD-
                          VARIANT-CRITERION">/Demo/
                          PostBuildVariantCriterions/Z</MATCHING-
                          CRITERION-REF>
                       <VALUE>0</VALUE>
                     </POST-BUILD-VARIANT-CONDITION>
                   </POST-BUILD-VARIANT-CONDITIONS>
                 </VARIATION-POINT>
               </FLAT-INSTANCE-DESCRIPTOR>
               <FLAT-INSTANCE-DESCRIPTOR>
                 <SHORT-NAME>SWC_PA_EP_Prm1_Z1</SHORT-NAME>
                 <ECU-EXTRACT-REFERENCE-IREF>
                   <CONTEXT-ELEMENT-REF DEST="ROOT-SW-COMPOSITION-
                      PROTOTYPE">/Demo/Systems/Sys/RootSwComp</
                      CONTEXT-ELEMENT-REF>
                   <CONTEXT-ELEMENT-REF DEST="SW-COMPONENT-PROTOTYPE">
                      /Demo/SwComponentTypes/RootComp/SWC_PA</CONTEXT
                      -ELEMENT-REF>
                   <CONTEXT-ELEMENT-REF DEST="P-PORT-PROTOTYPE">/Demo/
                      SwComponentTypes/PSWC/EP</CONTEXT-ELEMENT-REF>
                   <TARGET-REF DEST="PARAMETER-DATA-PROTOTYPE">/Demo/
                      PortInterfaces/EP/Prm1</TARGET-REF>
                 </ECU-EXTRACT-REFERENCE-IREF>
                 <VARIATION-POINT>
                   <POST-BUILD-VARIANT-CONDITIONS>
                     <POST-BUILD-VARIANT-CONDITION>
                       <MATCHING-CRITERION-REF DEST="POST-BUILD-
                          VARIANT-CRITERION">/Demo/
                          PostBuildVariantCriterions/Z</MATCHING-
                          CRITERION-REF>
                       <VALUE>1</VALUE>
                     </POST-BUILD-VARIANT-CONDITION>
                   </POST-BUILD-VARIANT-CONDITIONS>
                 </VARIATION-POINT>
               </FLAT-INSTANCE-DESCRIPTOR>
               <FLAT-INSTANCE-DESCRIPTOR>
                 <SHORT-NAME>SWC_PB_EP_Prm1</SHORT-NAME>
                 <ECU-EXTRACT-REFERENCE-IREF>
                   <CONTEXT-ELEMENT-REF DEST="ROOT-SW-COMPOSITION-
                      PROTOTYPE">/Demo/Systems/Sys/RootSwComp</
                      CONTEXT-ELEMENT-REF>
                           <CONTEXT-ELEMENT-REF DEST="SW-COMPONENT-PROTOTYPE">
                              /Demo/SwComponentTypes/RootComp/SWC_PB</CONTEXT
                              -ELEMENT-REF>
                           <CONTEXT-ELEMENT-REF DEST="P-PORT-PROTOTYPE">/Demo/
                              SwComponentTypes/PSWC/EP</CONTEXT-ELEMENT-REF>
                           <TARGET-REF DEST="PARAMETER-DATA-PROTOTYPE">/Demo/
                              PortInterfaces/EP/Prm1</TARGET-REF>
                        </ECU-EXTRACT-REFERENCE-IREF>
                      </FLAT-INSTANCE-DESCRIPTOR>
                    </INSTANCES>
                  </FLAT-MAP>
                </ELEMENTS>
             </AR-PACKAGE>
             <AR-PACKAGE>
                <SHORT-NAME>PostBuildVariantCriterions</SHORT-NAME>
                <ELEMENTS>
                  <POST-BUILD-VARIANT-CRITERION>
                    <SHORT-NAME>Z</SHORT-NAME>
                    <COMPU-METHOD-REF DEST="COMPU-METHOD">/
                       AUTOSAR_AISpecification/CompuMethods/TrsmTyp1</COMPU-
                       METHOD-REF>
                  </POST-BUILD-VARIANT-CRITERION>
                </ELEMENTS>
             </AR-PACKAGE>
           </AR-PACKAGES>
         </AR-PACKAGE>
       </AR-PACKAGES>
     </AUTOSAR>
G Changes History
The following SWS Items were removed in Rel. 4.0 Rev. 2: rte_sws_1254,
rte_sws_3552, rte_sws_3557, rte_sws_3559, rte_sws_3563, rte_sws_3564,
rte_sws_3568, rte_sws_3588, rte_sws_3593, rte_sws_3743, rte_sws_5512.
The following SWS   Items were changed    in Rel. 4.0 Rev. 2:   [SWS_Rte_01086],
[SWS_Rte_01111],      [SWS_Rte_01113],     [SWS_Rte_01114],     [SWS_Rte_01118],
[SWS_Rte_01156],      [SWS_Rte_01355],     [SWS_Rte_02517],     [SWS_Rte_02527],
[SWS_Rte_02528],      [SWS_Rte_02613],     [SWS_Rte_02615],     [SWS_Rte_02679],
[SWS_Rte_02728],      [SWS_Rte_02730],     [SWS_Rte_02747],     [SWS_Rte_02752],
[SWS_Rte_02753],      [SWS_Rte_03001],     [SWS_Rte_03560],     [SWS_Rte_03562],
[SWS_Rte_03567],      [SWS_Rte_03598],     [SWS_Rte_03599],     [SWS_Rte_03774],
[SWS_Rte_03827],      [SWS_Rte_03837],     [SWS_Rte_03930],     [SWS_Rte_03953],
[SWS_Rte_03954],      [SWS_Rte_03955],     [SWS_Rte_03956],     [SWS_Rte_03957],
[SWS_Rte_05021],       [SWS_Rte_05156],     SWS_Rte_05506,      [SWS_Rte_05509],
[SWS_Rte_06010],      [SWS_Rte_06633],     [SWS_Rte_07020],     [SWS_Rte_07021],
[SWS_Rte_07041],      [SWS_Rte_07184],     [SWS_Rte_07187],     [SWS_Rte_07195],
[SWS_Rte_07262],      [SWS_Rte_07280],     [SWS_Rte_07282],     [SWS_Rte_07293],
[SWS_Rte_07294],      [SWS_Rte_07375],     [SWS_Rte_07376],     [SWS_Rte_07409],
[SWS_Rte_07586],      [SWS_Rte_07589],     [SWS_Rte_07632],     [SWS_Rte_07636],
[SWS_Rte_07637],      [SWS_Rte_07667],     [SWS_Rte_07680],     [SWS_Rte_07683],
rte_sws_ext_3811.
The following SWS Items were added in Rel. 4.0 Rev. 2:          [SWS_Rte_02761],
rte_sws_3850,    rte_sws_3851,     [SWS_Rte_03852],             [SWS_Rte_03853],
[SWS_Rte_07045], [SWS_Rte_07046], [SWS_Rte_07047],              [SWS_Rte_07048],
[SWS_Rte_07049], [SWS_Rte_07050], [SWS_Rte_07051],              [SWS_Rte_07052],
[SWS_Rte_07053], [SWS_Rte_07054], [SWS_Rte_07055],              [SWS_Rte_07056],
[SWS_Rte_07057], [SWS_Rte_07058], [SWS_Rte_07059],              [SWS_Rte_07060],
[SWS_Rte_07061], [SWS_Rte_07062], [SWS_Rte_07063],              [SWS_Rte_07064],
[SWS_Rte_07065], [SWS_Rte_07066], [SWS_Rte_07067],              [SWS_Rte_07068],
[SWS_Rte_07069], [SWS_Rte_07070], [SWS_Rte_07071],              [SWS_Rte_07072],
[SWS_Rte_07073], [SWS_Rte_07074], [SWS_Rte_07075],              [SWS_Rte_07076],
[SWS_Rte_07077], [SWS_Rte_07078], [SWS_Rte_07079],              [SWS_Rte_07080],
The following SWS Items were removed in Rel. 4.0 Rev. 3: rte_sws_3838,
rte_sws_3844, rte_sws_3850, rte_sws_5171, rte_sws_7106, rte_sws_7108,
rte_sws_7164, rte_sws_7165, rte_sws_7168, rte_sws_7176, rte_sws_7674.
The following SWS   Items were changed   in Rel. 4.0 Rev. 3:   [SWS_Rte_01018],
[SWS_Rte_01019],      [SWS_Rte_01020],     [SWS_Rte_01156],    [SWS_Rte_01171],
[SWS_Rte_01238],      [SWS_Rte_01239],     [SWS_Rte_01248],    [SWS_Rte_01249],
[SWS_Rte_01300],      [SWS_Rte_02500],     [SWS_Rte_02568],    [SWS_Rte_02576],
[SWS_Rte_02627],      [SWS_Rte_02628],     [SWS_Rte_02629],    [SWS_Rte_02631],
[SWS_Rte_02648],      [SWS_Rte_02659],     [SWS_Rte_02662],    [SWS_Rte_02664],
[SWS_Rte_02675],      [SWS_Rte_02732],     [SWS_Rte_03526],    [SWS_Rte_03714],
[SWS_Rte_03731],      [SWS_Rte_03782],     [SWS_Rte_03793],    [SWS_Rte_03809],
[SWS_Rte_03810],      [SWS_Rte_03813],     [SWS_Rte_03827],    [SWS_Rte_03828],
[SWS_Rte_03829],      [SWS_Rte_03831],     [SWS_Rte_03832],    [SWS_Rte_03833],
[SWS_Rte_03837],      [SWS_Rte_03839],     [SWS_Rte_03840],    [SWS_Rte_03841],
[SWS_Rte_03842],      [SWS_Rte_03843],     [SWS_Rte_03845],    [SWS_Rte_03846],
[SWS_Rte_03847],      [SWS_Rte_03848],     [SWS_Rte_03849],    [SWS_Rte_03851],
[SWS_Rte_03907],      [SWS_Rte_03949],     [SWS_Rte_04526],    [SWS_Rte_05051],
[SWS_Rte_05052],       SWS_Rte_05059,     [SWS_Rte_05062],     [SWS_Rte_05078],
[SWS_Rte_05127],      [SWS_Rte_05128],     [SWS_Rte_06513],    [SWS_Rte_06515],
[SWS_Rte_06518],      [SWS_Rte_06519],     [SWS_Rte_06520],    [SWS_Rte_06530],
[SWS_Rte_06532],      [SWS_Rte_06535],     [SWS_Rte_06536],    [SWS_Rte_07022],
[SWS_Rte_07030],      [SWS_Rte_07036],     [SWS_Rte_07037],    [SWS_Rte_07038],
[SWS_Rte_07047],      [SWS_Rte_07048],     [SWS_Rte_07069],    [SWS_Rte_07104],
[SWS_Rte_07109],      [SWS_Rte_07110],     [SWS_Rte_07111],    [SWS_Rte_07113],
[SWS_Rte_07114],      [SWS_Rte_07116],     [SWS_Rte_07133],    [SWS_Rte_07136],
[SWS_Rte_07144],      [SWS_Rte_07148],     [SWS_Rte_07149],    [SWS_Rte_07157],
[SWS_Rte_07162],      [SWS_Rte_07163],     [SWS_Rte_07166],    [SWS_Rte_07175],
[SWS_Rte_07182],      [SWS_Rte_07185],     [SWS_Rte_07190],    [SWS_Rte_07194],
[SWS_Rte_07195],      [SWS_Rte_07200],     [SWS_Rte_07203],    [SWS_Rte_07214],
[SWS_Rte_07224],      [SWS_Rte_07250],     [SWS_Rte_07253],    [SWS_Rte_07255],
[SWS_Rte_07260],      [SWS_Rte_07261],     [SWS_Rte_07263],    [SWS_Rte_07266],
[SWS_Rte_07282],      [SWS_Rte_07292],     [SWS_Rte_07293],    [SWS_Rte_07294],
[SWS_Rte_07295],      [SWS_Rte_07310],     [SWS_Rte_07315],    [SWS_Rte_07381],
The following SWS   Items were added in    Rel. 4.0 Rev. 3:    [SWS_Rte_03854],
[SWS_Rte_03855],     [SWS_Rte_03856],     [SWS_Rte_03857],     [SWS_Rte_03858],
[SWS_Rte_03859],     [SWS_Rte_03860],     [SWS_Rte_03861],     [SWS_Rte_06700],
[SWS_Rte_06701],     [SWS_Rte_06702],     [SWS_Rte_06703],     [SWS_Rte_06704],
[SWS_Rte_06705],     [SWS_Rte_06706],     [SWS_Rte_06707],     [SWS_Rte_06708],
[SWS_Rte_06709],     [SWS_Rte_06710],     [SWS_Rte_06711],     [SWS_Rte_06712],
[SWS_Rte_06713],     [SWS_Rte_06714],     [SWS_Rte_06715],     [SWS_Rte_06716],
[SWS_Rte_06717],     [SWS_Rte_06718],     [SWS_Rte_06719],     [SWS_Rte_06720],
[SWS_Rte_06721],     [SWS_Rte_06722],     [SWS_Rte_06723],     [SWS_Rte_06724],
[SWS_Rte_06725],     [SWS_Rte_06726],     [SWS_Rte_07082],     [SWS_Rte_07083],
[SWS_Rte_07084],     [SWS_Rte_07085],     [SWS_Rte_07086],     [SWS_Rte_07087],
[SWS_Rte_07088],     [SWS_Rte_07089],     [SWS_Rte_07090],     [SWS_Rte_07091],
[SWS_Rte_07092],     [SWS_Rte_07093],     [SWS_Rte_07094],     [SWS_Rte_07095],
[SWS_Rte_07096],     [SWS_Rte_07097],     [SWS_Rte_07099],     [SWS_Rte_07593],
[SWS_Rte_07594],     [SWS_Rte_07595],     [SWS_Rte_07596],     [SWS_Rte_07692],
[SWS_Rte_07693],     [SWS_Rte_07694],     [SWS_Rte_07920],     [SWS_Rte_07921],
[SWS_Rte_07922],     [SWS_Rte_07923],     [SWS_Rte_07924],     [SWS_Rte_08004],
[SWS_Rte_08005],     [SWS_Rte_08007],     [SWS_Rte_08008],     [SWS_Rte_08009],
[SWS_Rte_08016],     [SWS_Rte_08017],     [SWS_Rte_08018],     [SWS_Rte_08020],
[SWS_Rte_08021],     [SWS_Rte_08022],     [SWS_Rte_08023],     [SWS_Rte_08024],
[SWS_Rte_08025],     [SWS_Rte_08026],     [SWS_Rte_08027],     [SWS_Rte_08028],
[SWS_Rte_08029],     [SWS_Rte_08030],     [SWS_Rte_08031],     [SWS_Rte_08032],
[SWS_Rte_08033],     [SWS_Rte_08034],     [SWS_Rte_08035],     [SWS_Rte_08036],
[SWS_Rte_08037],     [SWS_Rte_08038],     [SWS_Rte_08039],     [SWS_Rte_08040],
[SWS_Rte_08041],     [SWS_Rte_08042],     [SWS_Rte_08043],     [SWS_Rte_08044],
[SWS_Rte_08045],     [SWS_Rte_08303],     [SWS_Rte_08304],     [SWS_Rte_08305],
[SWS_Rte_08306],     [SWS_Rte_08307],     [SWS_Rte_08308],     [SWS_Rte_08400],
[SWS_Rte_08401],     [SWS_Rte_08402],     [SWS_Rte_08403],     [SWS_Rte_08404],
[SWS_Rte_08500],      [SWS_Rte_08501],     SWS_Rte_08503,      [SWS_Rte_08504],
[SWS_Rte_08505],     [SWS_Rte_08506],     [SWS_Rte_08507],     [SWS_Rte_08509],
[SWS_Rte_08510],      rte_sws_ext_7597,    rte_sws_ext_7598,    rte_sws_ext_8502,
rte_sws_ext_8508.
The following SWS items were removed in Rel. 4.1 Rev. 1: SWS_Rte_02652,
SWS_Rte_02731,      SWS_Rte_03555,     SWS_Rte_03569,    SWS_Rte_03581,
SWS_Rte_03747,      SWS_Rte_03803,     SWS_Rte_05020,    SWS_Rte_05033,
SWS_Rte_05054,      SWS_Rte_05055,     SWS_Rte_05056,    SWS_Rte_05057,
SWS_Rte_05058,      SWS_Rte_05059,     SWS_Rte_05066,    SWS_Rte_05067,
SWS_Rte_05110,      SWS_Rte_05163,     SWS_Rte_06028,    SWS_Rte_07296,
SWS_Rte_07649,      SWS_Rte_07656,     SWS_Rte_07657,    SWS_Rte_07658,
SWS_Rte_07665,      SWS_Rte_07687,     SWS_Rte_07688,    SWS_Rte_07690,
SWS_Rte_07691, SWS_Rte_08503.
The following SWS items were changed in Rel. 4.1 Rev. 1: [SWS_Rte_01003],
[SWS_Rte_01019], [SWS_Rte_01058], [SWS_Rte_01060], [SWS_Rte_01061],
The following SWS   items were added in    Rel. 4.1 Rev. 1:   [SWS_Rte_03862],
[SWS_Rte_06727],     [SWS_Rte_06728],     [SWS_Rte_06729],    [SWS_Rte_06730],
[SWS_Rte_06731],     [SWS_Rte_06732],     [SWS_Rte_06733],    [SWS_Rte_06734],
[SWS_Rte_06735],     [SWS_Rte_06736],     [SWS_Rte_06737],    [SWS_Rte_06738],
[SWS_Rte_06739],     [SWS_Rte_06740],     [SWS_Rte_06741],    [SWS_Rte_06742],
[SWS_Rte_06743],     [SWS_Rte_06744],     [SWS_Rte_06745],    [SWS_Rte_06746],
[SWS_Rte_06747],     [SWS_Rte_06748],     [SWS_Rte_06749],    [SWS_Rte_06750],
[SWS_Rte_06751],     [SWS_Rte_06752],     [SWS_Rte_06753],    [SWS_Rte_06754],
[SWS_Rte_06755],     [SWS_Rte_06756],     [SWS_Rte_06757],    [SWS_Rte_06758],
[SWS_Rte_06759],     [SWS_Rte_06760],     [SWS_Rte_06761],    [SWS_Rte_06762],
[SWS_Rte_06764],     [SWS_Rte_06765],     [SWS_Rte_06766],    [SWS_Rte_06767],
[SWS_Rte_06768],     [SWS_Rte_06769],     [SWS_Rte_06770],    [SWS_Rte_06771],
[SWS_Rte_06772],     [SWS_Rte_06773],     [SWS_Rte_06774],    [SWS_Rte_06775],
[SWS_Rte_06776],     [SWS_Rte_06777],     [SWS_Rte_06778],    [SWS_Rte_06779],
[SWS_Rte_06780],     [SWS_Rte_06781],     [SWS_Rte_06782],    [SWS_Rte_06783],
[SWS_Rte_06784],     [SWS_Rte_06785],     [SWS_Rte_06786],    [SWS_Rte_06787],
[SWS_Rte_06788],     [SWS_Rte_06789],     [SWS_Rte_06791],    [SWS_Rte_06792],
[SWS_Rte_06793],     [SWS_Rte_06794],     [SWS_Rte_06795],    [SWS_Rte_06796],
[SWS_Rte_06797],     [SWS_Rte_07828],     [SWS_Rte_07829],    [SWS_Rte_07830],
[SWS_Rte_07831],     [SWS_Rte_07832],     [SWS_Rte_07833],    [SWS_Rte_07834],
[SWS_Rte_07835],     [SWS_Rte_07836],     [SWS_Rte_07837],    [SWS_Rte_07838],
[SWS_Rte_07839],     [SWS_Rte_07840],     [SWS_Rte_07841],    [SWS_Rte_07925],
[SWS_Rte_07926],     [SWS_Rte_07927],     [SWS_Rte_08046],    [SWS_Rte_08047],
[SWS_Rte_08048],     [SWS_Rte_08049],     [SWS_Rte_08050],    [SWS_Rte_08051],
[SWS_Rte_08052],     [SWS_Rte_08053],     [SWS_Rte_08054],    [SWS_Rte_08055],
[SWS_Rte_08056],     [SWS_Rte_08057],     [SWS_Rte_08058],    [SWS_Rte_08059],
[SWS_Rte_08060],     [SWS_Rte_08061],     [SWS_Rte_08062],    [SWS_Rte_08063],
[SWS_Rte_08064],     [SWS_Rte_08065],     [SWS_Rte_08066],    [SWS_Rte_08067],
[SWS_Rte_08068],     [SWS_Rte_08069],     [SWS_Rte_08070],    [SWS_Rte_08071],
[SWS_Rte_08072],     [SWS_Rte_08073],     [SWS_Rte_08309],    [SWS_Rte_08310],
[SWS_Rte_08311],     [SWS_Rte_08405],     [SWS_Rte_08406],    [SWS_Rte_08407],
[SWS_Rte_08408],     [SWS_Rte_08409],     [SWS_Rte_08410],    [SWS_Rte_08411],
[SWS_Rte_08412],     [SWS_Rte_08511],     [SWS_Rte_08512],    [SWS_Rte_08513],
[SWS_Rte_08514],     [SWS_Rte_08600],     [SWS_Rte_08601],    [SWS_Rte_08700],
[SWS_Rte_08701],     [SWS_Rte_08702],     [SWS_Rte_08703],    [SWS_Rte_08704],
[SWS_Rte_08705],     [SWS_Rte_08706],     [SWS_Rte_08707],    [SWS_Rte_08708],
[SWS_Rte_08709],     [SWS_Rte_08710],     [SWS_Rte_08711],    [SWS_Rte_08712],
[SWS_Rte_08713],     [SWS_Rte_08725],     [SWS_Rte_08726],    [SWS_Rte_08727],
[SWS_Rte_08728],     [SWS_Rte_08729],     [SWS_Rte_08730],    [SWS_Rte_08731],
[SWS_Rte_08732],     [SWS_Rte_08733],     [SWS_Rte_08734],    [SWS_Rte_08735],
 Id              Heading
 [constr_9080]   The shortNames of PortInterfaces shall be unique within a software component if it
                 supports multiple instantiation or indirectAPI attribute is set to true
 [constr_9081]   Mapping to partition vs the value of VariableAccess.scope
 Id              Heading
 [constr_9020]   The blocking Rte_SwitchAck API may only be used by the runnable that describes
                 its usage.
none
 Id              Heading
 [constr_9082]   RtePositionInTask and RteBswPositionInTask values shall be unique in a
                 particular context
none
 Id              Heading
 [constr_9004]   Usage of WaitPoints is restricted depending on ExclusiveAreaImplMechanism
 Id              Heading
 [constr_9083]   Rte_IRead API may only be used by the runnable that describe its usage
 [constr_9084]   Rte_IWrite API may only be used by the runnable that describe its usage
 [constr_9085]   Rte_IWriteRef API may only be used by the runnable that describe its usage
 [constr_9086]   Rte_IInvalidate API may only be used by the runnable that is describing an write
                 access to the data
 [constr_9087]   Rte_IrvIRead API may only be used by the runnable that describe its usage
 [constr_9088]   Rte_IrvIWrite API may only be used by the runnable that describe its usage
 [constr_9089]   Rte_IrvRead API may only be used by the runnable that describe its usage
 [constr_9090]   Rte_IrvWrite API may only be used by the runnable that describe its usage
 [constr_9091]   RteSwNvRamMappingRef and RteSwNvBlockDescriptorRef are excluding
                 each other
 Id              Heading
 [constr_9011]   NvMBlockDescriptor related to a RAM Block of a NvBlockSwComponentType
                 shall use NvmBlockUseSyncMechanism
 [constr_9027]   Rte_IStatus API shall only be used by a RunnableEntity describing an read
                 access to the related data
 Id              Heading
 [constr_9044]   Union Implementation Data Type shall include at least two elements
 [constr_9065]   Signature of Serializer
 [constr_9066]   A BswModuleEntry representing a serializer shall comply to a serializers signature
 [constr_9068]   Return value for successful serialization
 [constr_9069]   Return value for a serialization error
 [constr_9071]   Signature of Deserializer
 Id              Heading
 [constr_9092]   Rte_IrvIWriteRef API may only be used by the runnable that describe its usage
 [constr_9093]   Rte_IrvIWriteRef may not return values written in previous executions
none
none
 constr_9010   [SWS_Rte_CONSTR_09010] Worst case execution time shall be less than the
                                      GCD
 constr_9012   [SWS_Rte_CONSTR_09012] Category 1 interrupts shall not access the RTE.
 constr_9011   [SWS_Rte_CONSTR_09011] NvMBlockDescriptor related to a RAM Block of
                                      a NvBlockSwComponentType shall use NvM-
                                      BlockDescriptor.NvmBlockUseSyncMechanism
 constr_9001   [SWS_Rte_CONSTR_09001] Whole DataPrototypeGroup in role Consisten-
                                      cyNeeds.dpgRequiresCoherency shall be prop-
                                      agated coherently
 constr_9002   [SWS_Rte_CONSTR_09002] The whole DataPrototypeGroup shall be read
                                      stable for the whole RunnableEntityGroup in the
                                      role ConsistencyNeeds.regRequiresStability
 constr_9013   [SWS_Rte_CONSTR_09013] Exactly one mode or one mode transition shall
                                      be active
 constr_9014   [SWS_Rte_CONSTR_09014] ModeSwitchPoint(s)         and      managedMode-
                                      Group(s) are mutually exclusive for synchronized
                                      ModeDeclarationGroupPrototypes
 constr_9007   [SWS_Rte_CONSTR_09007] issuedTrigger and BswTriggerDirectImplementa-
                                      tion are mutually exclusive
 constr_9008   [SWS_Rte_CONSTR_09008] The same Trigger in a trigger sink must not be
                                      connected to multiple trigger sources
 constr_9009   [SWS_Rte_CONSTR_09009] Synchronized Trigger shall not be referenced by
                                      more than one type of access method
 constr_9042   [SWS_Rte_CONSTR_09042] Array Implementation Data Type needs at least
                                      one element
 constr_9043   [SWS_Rte_CONSTR_09043] Structure Implementation Data Type needs at
                                      least one element
 constr_9080   [SWS_Rte_CONSTR_09080] The shortNames of PortInterfaces shall be
                                      unique within a software component if it
                                      supports multiple instantiation or PortAPIOp-
                                      tion.indirectAPI attribute is set to true
 constr_9015   [SWS_Rte_CONSTR_09015] Rte_Write API may only be used by the runnable
                                      that describe its usage
 constr_9016   [SWS_Rte_CONSTR_09016] Rte_Send API may only be used by the runnable
                                      that describes its usage
 constr_9017   [SWS_Rte_CONSTR_09017] Rte_Switch API may only be used by the runn-
                                      able that describes its usage
 constr_9018   [SWS_Rte_CONSTR_09018] Rte_Invalidate API may only be used by the
                                      runnable that describe its usage
 constr_9019   [SWS_Rte_CONSTR_09019] Rte_Feedback API may only be used by the
                                      runnable that describe its usage
 constr_9020   [SWS_Rte_CONSTR_09020] The blocking Rte_SwitchAck API may only be
                                      used by the runnable that describes its usage.
 constr_9021   [SWS_Rte_CONSTR_09021] Rte_Read API may only be used by the runnable
                                      that describe its usage
 constr_9022   [SWS_Rte_CONSTR_09022] Rte_DRead API may only be used by the runn-
                                      able that describe its usage
 constr_9023   [SWS_Rte_CONSTR_09023] Rte_Receive API may only be used by the runn-
                                      able that describe its usage
 constr_9024   [SWS_Rte_CONSTR_09024] Rte_Call API may only be used by the runnable
                                      that describe its usage
 constr_9025   [SWS_Rte_CONSTR_09025] Blocking Rte_Result API may only be used by
                                      the runnable that describe the WaitPoint
 constr_9083   [SWS_Rte_CONSTR_09083] Rte_IRead API may only be used by the runn-
                                      able that describe its usage
none
none
none