UCM 1.3 RTF Avatar
  1. OMG Issue

UCM13 — Introduce structured configuration parameters

  • Key: UCM13-16
  • Status: open  
  • Source: THALES ( Thomas Vergnaud)
  • Summary:

    It is currently not possible to gather several configuration parameters together.

    For example, let us suppose we want to design a message connector that handles channels with different FIFO priorities.
    Such a connector would allow the specification of a channel number for each emission port.
    It would also allow the specification of a FIFO priority for each channel number in each reception port.

    See the following example of what would be needed:

    <interactionModule name="enhanced_fifo_connector">
      <contractModule name="data_types">
        <integer kind="int32" name="channel_id_t"/>
        <integer kind="uint8" name="fifo_priority_t"/>
      </contractModule>
      <connectorDef name="enh_fifo_msg_cnt" pattern="::ucm_core::messages::msg_intr_pat">
        <extends ref="::ucm_core::messages::simple_msg_cnt"/>
        <portConf port="emitter">
          <configParam max="1" min="1" name="channel_id" type="data_types::channel_id_t"/>
        </portConf>
        <portConf port="receiver">
          <structParam max="-1" min="0" name="fifo_priorities">
            <comment>the default fifo priority is 0</comment>
            <configParam max="-1" min="1" name="emitter_channel_id" type="data_types::channel_id_t"/>
            <configParam max="1" min="1" name="fifo_priority" type="data_types::fifo_priority_t"/>
          </structParam>
        </portConf>
      </connectorDef>
    </interactionModule>
    

    Sets made of several channels and one priority can be specified for each port “receiver”.

    Such a connector could be used as follows:

    <componentModule name="components">
      <contractModule name="contracts">
        <integer kind="int16" name="payload_t"/>
      </contractModule>
      
      <bindingSet name="payload_binding">
        <binding abstract="::ucm_core::messages::api::transm_data_t" actual="contracts::payload_t"/>
      </bindingSet>
      
      <compType name="C_sender">
        <port bindings="payload_binding" name="snd" type="::ucm_core::messages::msg_emtr_pt"/>
      </compType>
      
      <compType name="C_receiver">
        <port bindings="payload_binding" name="rcv" type="::ucm_core::messages::msg_rcvr_pt"/>
      </compType>
      
      <compType name="C_appli">
      </compType>
      
      <atomic lang="::ucm_lang::cpp::CPP11_typed" name="CI_sender" type="C_sender"/>
      <atomic lang="::ucm_lang::cpp::CPP11_typed" name="CI_receiver" type="C_receiver"/>
      
      <composite name="appli" type="C_appli">
        <part name="c1" ref="CI_sender"/>
        <part name="c2" ref="CI_sender"/>
        <part name="c3" ref="CI_sender"/>
        <part name="c4" ref="CI_receiver"/>
        <part name="c5" ref="CI_receiver"/>
        <connection name="cnx1" ref="::enhanced_fifo_connector::enh_fifo_msg_cnt">
          <end name="c1_snd" part="c1" port="snd">
            <config def="channel_id" value="1"/>
          </end>
          <end name="c2_snd" part="c2" port="snd">
            <config def="channel_id" value="2"/>
          </end>
          <end name="c3_snd" part="c3" port="snd">
            <config def="channel_id" value="3"/>
          </end>
          <end name="c4_rcv" part="c4" port="rcv">
            <structConfig def="fifo_priorities">
              <config def="emitter_channel_id" value="1"/>
              <config def="fifo_priority" value="2"/>
            </structConfig>
            <structConfig def="fifo_priorities">
              <config def="emitter_channel_id" value="2"/>
              <config def="emitter_channel_id" value="3"/>
              <config def="fifo_priority" value="9"/>
            </structConfig>
          </end>
          <end name="c5_rcv" part="c5" port="rcv">
            <structConfig def="fifo_priorities">
              <config def="emitter_channel_id" value="1"/>
              <config def="fifo_priority" value="5"/>
            </structConfig>
            <structConfig def="fifo_priorities">
              <config def="emitter_channel_id" value="2"/>
              <config def="fifo_priority" value="2"/>
            </structConfig>
            <structConfig def="fifo_priorities">
              <config def="emitter_channel_id" value="3"/>
              <config def="fifo_priority" value="1"/>
            </structConfig>
          </end>
        </connection>
      </appAssembly>
    </componentModule>
    

    Composite component 'C_appli' contains 5 subcomponents: c1, c2 and c3 send messages to c4 and c5.
    Subcomponent c1 sends on channel 1, c2 sends on channel 2, c3 sends on channel 3.

    Subcomponents c4 and c5 receive all messages, with different priorities.
    Thus, c4 receives data from c1 (channel 1) with priority 2, data from c2 and c3 (channels 2 and 3) with priority 9.
    And c5 receives data from c1 (channel 1) with priority 5, data from c2 (channel 2) with priority 2, data from c3 (channels 3) with priority 1.

  • Reported: UCM 1.2 — Thu, 15 Oct 2020 13:16 GMT
  • Updated: Wed, 23 Jun 2021 13:19 GMT
  • Attachments: