1"use strict";(self.webpackChunkpopdoc=self.webpackChunkpopdoc||[]).push([["6698"],{8559(e,n,s){s.r(n),s.d(n,{metadata:()=>t,default:()=>a,frontMatter:()=>d,contentTitle:()=>o,toc:()=>h,assets:()=>c});var t=JSON.parse('{"id":"paio/editors/vfb-editor","title":"VFB Editor","description":"Build the virtual function bus: software component compositions, ports, and connections.","source":"@site/content/public/docs/paio/editors/vfb-editor.md","sourceDirName":"paio/editors","slug":"/paio/editors/vfb-editor","permalink":"/docs/paio/editors/vfb-editor","draft":false,"unlisted":false,"tags":[],"version":"current","sidebarPosition":4,"frontMatter":{"title":"VFB Editor","description":"Build the virtual function bus: software component compositions, ports, and connections.","sidebar_position":4,"sidebar_label":"VFB Editor"},"sidebar":"publicSidebar","previous":{"title":"Signal Editor","permalink":"/docs/paio/editors/signal-editor"},"next":{"title":"Interface Editor","permalink":"/docs/paio/editors/interface-editor"}}'),i=s(4848),r=s(8453);let d={title:"VFB Editor",description:"Build the virtual function bus: software component compositions, ports, and connections.",sidebar_position:4,sidebar_label:"VFB Editor"},o,c={},h=[{value:"What This Chapter Covers",id:"what-this-chapter-covers",level:2},{value:"8.1 Files Written on Save",id:"81-files-written-on-save",level:2},{value:"8.2 SWC Kinds",id:"82-swc-kinds",level:2},{value:"8.3 Canvas Operations",id:"83-canvas-operations",level:2},{value:"Mouse",id:"mouse",level:3},{value:"Keyboard",id:"keyboard",level:3},{value:"Toolbar Buttons (Bottom Left of the Canvas)",id:"toolbar-buttons-bottom-left-of-the-canvas",level:3},{value:"8.4 The Root Level and Drill-Down",id:"84-the-root-level-and-drill-down",level:2},{value:"8.5 Context Menus",id:"85-context-menus",level:2},{value:"8.5.1 Empty Canvas (Root Level Only)",id:"851-empty-canvas-root-level-only",level:3},{value:"8.5.2 Composition Frame (the Composition You Are Currently Drilled Into)",id:"852-composition-frame-the-composition-you-are-currently-drilled-into",level:3},{value:"8.5.3 Composition Node (a Composition You Are Not Drilled Into)",id:"853-composition-node-a-composition-you-are-not-drilled-into",level:3},{value:"8.5.4 Atomic SWC Node",id:"854-atomic-swc-node",level:3},{value:"8.5.5 Port Node",id:"855-port-node",level:3},{value:"8.5.6 InterfaceMapping Node",id:"856-interfacemapping-node",level:3},{value:"8.5.7 Connections",id:"857-connections",level:3},{value:"8.6 Connecting Ports",id:"86-connecting-ports",level:2},{value:"8.7 Properties Panel (Right)",id:"87-properties-panel-right",level:2},{value:"SWC / Composition Node",id:"swc--composition-node",level:3},{value:"Port Node",id:"port-node",level:3},{value:"Connections",id:"connections",level:3},{value:"InterfaceMapping Node",id:"interfacemapping-node",level:3},{value:"8.8 SWC Internal Behavior Dialog",id:"88-swc-internal-behavior-dialog",level:2},{value:"Right-Clicking the Canvas",id:"right-clicking-the-canvas",level:3},{value:"Runnable Properties",id:"runnable-properties",level:3},{value:"8.9 AA Internal Behavior Dialog (Adaptive Application)",id:"89-aa-internal-behavior-dialog-adaptive-application",level:2},{value:"Right-Clicking the Canvas (the AA Body)",id:"right-clicking-the-canvas-the-aa-body",level:3},{value:"8.10 Machine Configuration Dialog (Adaptive)",id:"810-machine-configuration-dialog-adaptive",level:2},{value:"8.10.1 The Ten Modules on the MODULE Tab",id:"8101-the-ten-modules-on-the-module-tab",level:3},{value:"8.10.2 The PROCESSES Tab",id:"8102-the-processes-tab",level:3},{value:"8.11 PARA Base Configuration",id:"811-para-base-configuration",level:2},{value:"8.12 ECU Configuration Dialog (Classic)",id:"812-ecu-configuration-dialog-classic",level:2},{value:"8.13 Saving, Undo, and External Changes",id:"813-saving-undo-and-external-changes",level:2},{value:"8.14 Integration with Other Editors",id:"814-integration-with-other-editors",level:2}];function l(e){let n={a:"a",blockquote:"blockquote",code:"code",em:"em",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h2,{id:"what-this-chapter-covers",children:"What This Chapter Covers"}),"\n",(0,i.jsxs)(n.p,{children:["This chapter explains how to use the VFB editor: from the\n",(0,i.jsx)(n.a,{href:"/docs/paio/reference/glossary#194-software-structure",children:"Virtual Functional Bus"})," point of view you place\nsoftware components (",(0,i.jsx)(n.a,{href:"/docs/paio/reference/glossary#194-software-structure",children:"SWC"}),") and\n",(0,i.jsx)(n.a,{href:"/docs/paio/reference/glossary#194-software-structure",children:"compositions"}),", then connect\n",(0,i.jsx)(n.a,{href:"/docs/paio/reference/glossary#194-software-structure",children:"ports"}),".\nIt covers canvas operations, the complete list of context menus, the properties panel, and four\ndetail dialogs. Among the detail dialogs, ",(0,i.jsx)(n.strong,{children:"SWC Internal Behavior"})," and ",(0,i.jsx)(n.strong,{children:"AA Internal Behavior"}),"\nopen when you double-click a node, while ",(0,i.jsx)(n.strong,{children:"Machine Configuration"})," and ",(0,i.jsx)(n.strong,{children:"ECU Configuration"})," open\nwhen you click the mapping icon in the header of a composition node."]}),"\n",(0,i.jsxs)(n.p,{children:["This chapter is for users who design the softw
1are architecture of the AUTOSAR Classic or Adaptive\nplatform. A project must be open before you start. It helps to define the interfaces you will\nassign to ports in advance in ",(0,i.jsx)(n.a,{href:"/docs/paio/editors/interface-editor",children:"09. Interface Editor"}),".\nTo use ECU/HPC mapping, nodes must already exist in ",(0,i.jsx)(n.a,{href:"/docs/paio/editors/ivc-editor",children:"06. IVC Editor"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["In the project Explorer, open ",(0,i.jsx)(n.code,{children:"design"})," \u25B8 ",(0,i.jsx)(n.code,{children:"System"})," \u25B8 ",(0,i.jsx)(n.strong,{children:"VFB"})," and the editor opens in a tab."]}),"\n",(0,i.jsx)(n.h2,{id:"81-files-written-on-save",children:"8.1 Files Written on Save"}),"\n",(0,i.jsx)(n.p,{children:"The VFB editor writes several files together in a single save. The files are the following."}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"File"}),(0,i.jsx)(n.th,{children:"Contents"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"VFB model"}),(0,i.jsx)(n.td,{children:"The composition list (name \xb7 description \xb7 boundary ports \xb7 prototypes) and the InterfaceMapping list"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"SWC definition"}),(0,i.jsx)(n.td,{children:"The definition of one SWC (ports, connectors, internal behavior, AP mappings)"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"design/SW
1C/Layout/<Composition>.vfb.layout"})}),(0,i.jsx)(n.td,{children:"The canvas arrangement of one composition"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Machine configuration"}),(0,i.jsx)(n.td,{children:"The Adaptive Machine configuration"})]})]})]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Connectors are stored in the composition's SWC definition, not in the VFB model."})," A composition\nentry in the VFB model holds only the name, description, boundary ports, and prototype references."]}),"\n",(0,i.jsxs)(n.p,{children:["A ",(0,i.jsx)(n.code,{children:".vfb.layout"})," file is a project-internal file that holds only the screen arrangement \u2014 node\npositions, sizes, port positions, and connection routes. This information is not written to ARXML,\nand it is not restored on import either (an import generates new node positions)."]}),"\n",(0,i.jsx)(n.p,{children:"The kind folder name is fixed per SWC kind, as follows."}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"SWC kind"}),(0,i.jsx)(n.th,{children:"Folder name"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Composition"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"Composition"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Application"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"Application"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Adaptive Application"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"AdaptiveApplication"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Complex Device Driver"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"ComplexDeviceDriver"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Service"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"Service"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Ecu Abstraction"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"EcuAbstraction"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Sensor Actuator"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"SensorActuator"})})]})]})]}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsxs)(n.p,{children:["The old file of a renamed SWC is deleted ",(0,i.jsx)(n.strong,{children:"when you save"}),". Until you save, the file with the old\nname stays on disk. So if the file list looks wrong after a rename, save with ",(0,i.jsx)(n.code,{children:"Ctrl+S"})," first."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"82-swc-kinds",children:"8.2 SWC Kinds"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.strong,{children:"ADD SWC"})," menu offers seven kinds."]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Menu label"}),(0,i.jsx)(n.th,{children:"Description"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Composition"})}),(0,i.jsx)(n.td,{children:"A composition (a container that holds other SWCs)"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Adaptive Application"})}),(0,i.jsx)(n.td,{children:"An Adaptive Platform application"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Application"})}),(0,i.jsx)(n.td,{children:"A Classic application SWC"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Complex Device Driver"})}),(0,i.jsx)(n.td,{children:"A complex device driver"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Ecu Abstraction"})}),(0,i.jsx)(n.td,{children:"An ECU abstraction SWC"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Sensor Actuator"})}),(0,i.jsx)(n.td,{children:"A sensor/actuator SWC"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Service"})}),(0,i.jsx)(n.td,{children:"A BSW service SWC"})]})]})]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"An InterfaceMapping node is not an SWC kind."})," You can create it only with\n",(0,i.jsx)(n.strong,{children:"ADD INTERFACE MAPPING"}),", which appears when you right-click the empty canvas at the root level.\nIt is a separate node, and its only role is to link an AP service interface to CP SR/CS interfaces\n(see 8.7)."]}),"\n",(0,i.jsx)(n.h2,{id:"83-canvas-operations",children:"8.3 Canvas Operations"}),"\n",(0,i.jsx)(n.p,{children:"This section lists the mouse and keyboard operations and the toolbar buttons you use on the canvas."}),"\n",(0,i.jsx)(n.h3,{id:"mouse",children:"Mouse"}),"\n",(0,i.jsx)(n.p,{children:"The mouse operations are the following."}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Operation"}),(0,i.jsx)(n.th,{children:"Behavior"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Left-click drag on empty space"}),(0,i.jsx)(n.td,{children:"Pan the view"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Middle-button drag"}),(0,i.jsx)(n.td,{children:"Pan the view"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.code,{children:"Space"})," + left-click drag"]}),(0,i.jsx)(n.td,{children:"Pan the view"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Mouse wheel"}),(0,i.jsx)(n.td,{children:"Scroll the view up and down (the same direction as a document scroll)"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.code,{children:"Shift"})," + wheel"]}),(0,i.jsx)(n.td,{children:"Scroll the view left and right"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.code,{children:"Ctrl"})," + wheel"]}),(0,i.jsx)(n.td,{children:"Zoom (0.1x to 4.0x, 1.0x by default)"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Click a node"}),(0,i.jsx)(n.td,{children:"Selects it. Eight resize handles appear on the selection"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.code,{children:"Ctrl"})," + click"]}),(0,i.jsx)(n.td,{children:"Toggle multi-selection (both nodes and connections)"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Drag a node"}),(0,i.jsx)(n.td,{children:"Move"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Drag a resize handle"}),(0,i.jsx)(n.td,{children:"Resize"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.code,{children:"Shift"})," + drag from a port"]}),(0,i.jsx)(n.td,{children:"Connection mode (see 8.6)"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Double-click a composition"}
1),(0,i.jsx)(n.td,{children:"Drill down (enter that composition)"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Double-click Application / Complex Device Driver / Service / Ecu Abstraction / Sensor Actuator"}),(0,i.jsxs)(n.td,{children:["The ",(0,i.jsx)(n.strong,{children:"SWC Internal Behavior"})," dialog (8.8)"]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Double-click Adaptive Application"}),(0,i.jsxs)(n.td,{children:["The ",(0,i.jsx)(n.strong,{children:"AA Internal Behavior"})," dialog (8.9)"]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Right-click"}),(0,i.jsx)(n.td,{children:"Context menu (8.5)"})]})]})]}),"\n",(0,i.jsx)(n.h3,{id:"keyboard",children:"Keyboard"}),"\n",(0,i.jsx)(n.p,{children:"The keys you can use on the canvas are the following."}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Key"}),(0,i.jsx)(n.th,{children:"Behavior"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"Ctrl+S"})}),(0,i.jsx)(n.td,{children:"Save"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"Ctrl+Z"})}),(0,i.jsx)(n.td,{children:"Undo"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.code,{children:"Ctrl+Y"})," / ",(0,i.jsx)(n.code,{children:"Ctrl+Shift+Z"})]}),(0,i.jsx)(n.td,{children:"Redo"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"Esc"})}),(0,i.jsx)(n.td,{children:"Cancels only the waypoint drag if one is in progress; otherwise clears the selection"})]})]})]}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Some keys do not work on the canvas."})," ",(0,i.jsx)(n.code,{children:"Delete"}),"/",(0,i.jsx)(n.code,{children:"Backspace"}),", ",(0,i.jsx)(n.code,{children:"Ctrl+A"}),",\n",(0,i.jsx)(n.code,{children:"Ctrl+C"}),"/",(0,i.jsx)(n.code,{children:"Ctrl+V"}),"/",(0,i.jsx)(n.code,{children:"Ctrl+X"}),", the arrow keys, ",(0,i.jsx)(n.code,{children:"Ctrl+Shift+S"}),", and ",(0,i.jsx)(n.code,{children:"Ctrl+O"})," ",(0,i.jsx)(n.strong,{children:"do nothing"})," on the\nVFB canvas. In particular, you delete a node or a port with ",(0,i.jsx)(n.strong,{children:"DELETE in the right-click menu"}),",\nnot with the ",(0,i.jsx)(n.code,{children:"Delete"})," key. Note that ",(0,i.jsx)(n.code,{children:"Delete"}),"/",(0,i.jsx)(n.code,{children:"Backspace"})," do work inside the detail dialogs of\n8.8 and 8.9."]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"toolbar-buttons-bottom-left-of-the-canvas",children:"Toolbar Buttons (Bottom Left of the Canvas)"}),"\n",(0,i.jsx)(n.p,{children:"Each toolbar button behaves as follows."}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Button"}),(0,i.jsx)(n.th,{children:"Behavior"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Zoom In / Zoom Out"}),(0,i.jsx)(n.td,{children:"Zoom in / zoom out. At the limit the button dims and stops responding"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Fit to View"}),(0,i.jsx)(n.td,{children:"Fits the whole content into view"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Auto Layout"}),(0,i.jsx)(n.td,{children:"Automatic layout (elkjs based; see the description below)"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Toggle Grid"}),(0,i.jsx)(n.td,{children:"Toggles the grid (on by default)"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Toggle Connector Animation"}),(0,i.jsxs)(n.td,{children:["Toggles the flow animation on connections (",(0,i.jsx)(n.strong,{children:"off"})," by default)"]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Export as PNG"}),(0,i.jsx)(n.td,{children:"Saves the current diagram as a PNG"})]})]})]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Export as PNG"})," saves into the ",(0,i.jsx)(n.code,{children:"doc/capture/"})," folder inside the project, named\n",(0,i.jsx)(n.code,{children:"YYYYMMDD_HHMMSS_NNN.png"})," (",(0,i.jsx)(n.code,{children:"NNN"}
1)," is a three-digit serial number that continues from the existing\nfiles in the folder). If the canvas is empty, a ",(0,i.jsx)(n.code,{children:"No content to export"})," warning toast appears and\nnothing is saved."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Auto Layout"})," clears every connection route you adjusted by hand. If at least one such route\nexists, a confirmation dialog appears first \u2014 the title is ",(0,i.jsx)(n.strong,{children:"Auto Layout"}),", the body is\n",(0,i.jsx)(n.code,{children:"N manually adjusted connector route(s) will be replaced by the automatic layout."}),", and the buttons\nare ",(0,i.jsx)(n.strong,{children:"Replace"})," / ",(0,i.jsx)(n.strong,{children:"Cancel"}),". While it runs, a progress dialog that you can cancel is shown."]}),"\n",(0,i.jsx)(n.h2,{id:"84-the-root-level-and-drill-down",children:"8.4 The Root Level and Drill-Down"}),"\n",(0,i.jsx)(n.p,{children:"VFB has two level concepts."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Root level"})," \u2014 you have not entered any composition. Top-level compositions and\nInterfaceMapping nodes are placed here."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Drilled-down state"})," \u2014 you have entered one composition. That composition is drawn as a frame\nand its child nodes are placed inside the frame."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Double-click a composition to drill into it. Double-clicking the composition you are already in\n(the active one) does nothing."}),"\n",(0,i.jsxs)(n.p,{children:["When you drill down, a ",(0,i.jsx)(n.strong,{children:"breadcrumb"})," appears at the top left of the canvas and shows your position\nin the form ",(0,i.jsx)(n.code,{children:"SystemName > Composition > ..."}),". Click an earlier entry to return to that level. The\nlast entry is your current position, so it is bold and not clickable. At the root level the\nbreadcrumb is hidden and an SVG system label is shown instead."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"The VFB canvas at the root level",src:s(2269).A+"",width:"1875",height:"1250"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.em,{children:["The root level. Only one top-level composition, ",(0,i.jsx)(n.code,{children:"ParkAssistComposition"}),", is placed, and the system label (",(0,i.jsx)(n.code,{children:"E2eProject"}),") appears where the breadcrumb would be."]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Drilled down into a composition",src:s(305).A+"",width:"1875",height:"1250"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.em,{children:["The same composition after double-clicking to drill into it. The composition turns into a frame and its three child SWCs are placed inside it. The label at the top left changes to the breadcrumb ",(0,i.jsx)(n.code,{children:"System > ParkAssistComposition"}),"."]})}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsxs)(n.p,{children:["Right-clicking the empty canvas ",(0,i.jsx)(n.strong,{children:"outside"})," the frame while drilled down shows no menu. The empty\ncanvas looks like it is at the same level as the open composition, but a node created there would\ngo under that composition and create an illusion about the level. When you create a node while\ndrilled down, always ",(0,i.jsx)(n.strong,{children:"right-click the frame (the composition)"}),"."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"85-context-menus",children:"8.5 Context Menus"}),"\n",(0,i.jsx)(n.p,{children:"The context menu is made up differently depending on what you right-click. This section lists the\nmenu items per target."}),"\n",(0,i.jsx)(n.h3,{id:"851-empty-canvas-root-level-only",children:"8.5.1 Empty Canvas (Root Level Only)"}),"\n",(0,i.jsx)(n.p,{children:"Right-clicking the empty canvas at the root level shows the following menu."}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Item"}),(0,i.jsx)(n.th,{children:"Behavior"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"ADD COMPOSITION"})}),(0,i.jsx)(n.td,{children:"Adds a new composition"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"ATTACH COMPOSITION"})}),(0,i.jsx)(n.td,{children:"Attaches an already defined composition as a prototype"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"ADD INTERFACE MAPPING"})}),(0,i.jsx)(n.td,{children:"Adds an InterfaceMapping node"})]})]})]}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.strong,{children:"ATTACH COMPOSITION"})," submenu offers both the compositions loaded in the diagram and the\ncompositions that exist only on disk (not placed yet) as candidates. At the root level the root\ncomposition itself is excluded. While drilled down, the current composition, its ancestor\ncompositions, compositions that are already children, and compositions that would create a circular\nreference are excluded. If there is no candidate, ",(0,i.jsx)(n.code,{children:"(No available compositions)"})," appears as a dimmed\nitem."]}),"\n",(0,i.jsx)(n.h3,{id:"852-composition-frame-the-composition-you-are-currently-drilled-into",children:"8.5.2 Composition Frame (the Composition You Are Currently Drilled Into)"}),"\n",(0,i.jsx)(n.p,{children:"Right-clicking the composition frame you are drilled into shows the following menu."}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Item"}),(0,i.jsx)(n.th,{children:"Behavior"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"ADD SWC"})}),(0,i.jsx)(n.td,{children:"Adds one of the seven kinds (8.2) inside this composition"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"ATTACH SWC"})}),(0,i.jsx)(n.td,{children:"Attaches an existing SWC as a prototype of this composition"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"ADD Port"})}),(0,i.jsxs)(n.td,{children:["Adds a ",(0,i.jsx)(n.strong,{children:"PPort"}),", an ",(0,i.jsx)(n.strong,{children:"RPort"}),", or a ",(0,i.jsx)(n.strong,{children:"PRPort"})]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"ADD COMPOSITION"})}),(0,i.jsx)(n.td,{children:"Adds a child composition"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"ATTACH COMPOSITION"})}),(0,i.jsx)(n.td,{children:"Attaches an existing composition"})]})]})]}),"\n",(0,i.jsxs)(n.p,{children:["Items in the ",(0,i.jsx)(n.strong,{children:"ATTACH SWC"})," submenu appear in the form ",(0,i.jsx)(n.code,{children:"Name (kind)"}),". Composition types are excluded\nhere (",(0,i.jsx)(n.strong,{children:"ATTACH COMPOSITION"})," handles them), and so are the node itself, nodes that are already\nchildren, and nodes that would create a circular reference. If there is no candidate,\n",(0,i.jsx)(n.code,{children:"(No available SWCs)"})," appears."]}),"\n",(0,i.jsx)(n.h3,{id:"853-composition-node-a-composition-you-are-not-drilled-into",children:"8.5.3 Composition Node (a Composition You Are Not Drilled Into)"}),"\n",(0,i.jsx)(n.p,{children:"Right-clicking a composition node you are not drilled into shows the following menu."}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Item"}),(0,i.jsx)(n.th,{children:"Behavior"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"ADD Port"})}),(0,i.jsx)(n.td,{children:"Adds a PPort, an RPort, or a PRPort"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Map to ECU/HPC"})}),(0,i.jsx)(n.td,{children:"Maps to an entry chosen from the ECU/HPC list of IVC (shown only on a top-level composition)"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"DETACH"})}),(0,i.jsx)(n.td,{children:"Detaches it from the parent composition. Dimmed and disabled
1when there is no parent"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"DELETE"})}),(0,i.jsx)(n.td,{children:"Deletes it (through the confirmation dialog below)"})]})]})]}),"\n",(0,i.jsxs)(n.p,{children:["You manage child nodes by drilling into that composition. That is why this menu has no ",(0,i.jsx)(n.strong,{children:"ADD SWC"}),"\nand no ",(0,i.jsx)(n.strong,{children:"ATTACH SWC"}),"."]}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"DETACH and DELETE differ in scope, so take care."})," ",(0,i.jsx)(n.strong,{children:"DETACH"})," removes only that prototype from\nthe parent composition; the SWC type itself remains. ",(0,i.jsx)(n.strong,{children:"DELETE"})," first opens a confirmation dialog\ntitled ",(0,i.jsx)(n.strong,{children:"Delete SWC"}),", and if you choose ",(0,i.jsx)(n.strong,{children:"Delete"})," it ",(0,i.jsx)(n.strong,{children:"removes the SWC from every composition\nand deletes its type file as well."})," The body of the confirmation dialog reads:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:'Are you sure you want to delete "<name>"?\nThis will remove the SWC from all compositions and delete its type file.\nThis action cannot be undone.\n'})}),"\n",(0,i.jsx)(n.p,{children:"The file deletion takes effect when you save (see 8.1)."}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.strong,{children:"Map to ECU/HPC"})," submenu is made up as follows."]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Item"}),(0,i.jsx)(n.th,{children:"Display"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"A node already mapped to this composition"}),(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.code,{children:"DoorEcu [ECU] \u2713"})," \u2014 selecting it again clears the mapping"]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"A node mapped to another composition"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"DoorEcu [ECU] (<- OtherComposition)"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"An unmapped node"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"DoorEcu [ECU]"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Unmap"})}),(0,i.jsx)(n.td,{children:"Shown only when a mapping exists"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Create ECU & Map"})}),(0,i.jsx)(n.td,{children:"Creates an ECU of the same name in IVC and maps it. Disabled when a mapping already exists"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Create HPC & Map"})}),(0,i.jsx)(n.td,{children:"Creates an HPC of the same name in IVC and maps it. Disabled when a mapping already exists"})]})]})]}),"\n",(0,i.jsxs)(n.p,{children:["When the node is mapped to an ECU, a green ",(0,i.jsx)(n.strong,{children:"ECU icon"})," is attached to the node header; when it is\nmapped to an HPC, a blue ",(0,i.jsx)(n.strong,{children:"HPC icon"}),". A single click on the icon opens the ECU Configuration (8.12)\nor the Machine Configuration (8.10) dialog respectively. Double-clicking on the icon does not drill\ndown."]}),"\n",(0,i.jsx)(n.h3,{id:"854-atomic-swc-node",children:"8.5.4 Atomic SWC Node"}),"\n",(0,i.jsx)(n.p,{children:"Right-clicking an Atomic SWC node shows the following menu."}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Item"}),(0,i.jsx)(n.th,{children:"Behavior"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"ADD Port"})}),(0,i.jsx)(n.td,{children:"Adds a PPort, an RPort, or a PRPort"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"DETACH SWC"})}),(0,i.jsx)(n.td,{children:"Detaches it from the parent composition. Disabled when there is no parent"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"DELETE"})}),(0,i.jsxs)(n.td,{children:["Deletes it. Goes through the same ",(0,i.jsx)(n.strong,{children:"Delete SWC"})," confirmation dialog as 8.5.3 and deletes the type file as well"]})]})]})]}),"\n",(0,i.jsx)(n.h3,{id:"855-port-node",children:"8.5.5 Port Node"}),"\n",(0,i.jsx)(n.p,{children:"Right-clicking a port shows the following menu."}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Item"}),(0,i.jsx)(n.th,{children:"Behavior"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"CONNECT TO"})}),(0,i.jsx)(n.td,{children:"Connects to a port chosen from the list of compatible counterparts"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"CONNECT TO MAPPING"})}),(0,i.jsx)(n.td,{children:"Connects to an InterfaceMapping node"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"DERIVE SR/CS INTERFACE"})}),(0,i.jsx)(n.td,{children:"Derives SR/CS interfaces and an InterfaceMapping from the ServiceInterface of this port"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"DELETE"})}),(0,i.jsx)(n.td,{children:"Deletes the port"})]})]})]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"CONNECT TO"})," candidates appear in the form ",(0,i.jsx)(n.code,{children:"[D] SwcName / PortName"})," or\n",(0,i.jsx)(n.code,{children:"[A] SwcName / PortName"}),". ",(0,i.jsx)(n.code,{children:"D"})," means a delegation connector and ",(0,i.jsx)(n.code,{children:"A"})," an assembly connector. The\nsituational notice items are ",(0,i.jsx)(n.code,{children:"(Port not found)"}),", ",(0,i.jsx)(n.code,{children:"(PortInterface not set)"}),", and\n",(0,i.jsx)(n.code,{children:"(No compatible ports)"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"CONNECT TO MAPPING"})," shows ",(0,i.jsx)(n.code,{children:"(No InterfaceMapping nodes)"})," when no InterfaceMapping node exists."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"DERIVE SR/CS INTERFACE"})," appears only when all three conditions hold \u2014 you are at the\n",(0,i.jsx)(n.strong,{children:"root level"}),", the port has an interface assigned, and the category of that interface is\n",(0,i.jsx)(n.code,{children:"service"}),". It is not shown while you are drilled down."]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"856-interfacemapping-node",children:"8.5.6 InterfaceMapping Node"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"DELETE"})," is the only menu item."]}),"\n",(0,i.jsx)(n.h3,{id:"857-connections",children:"8.5.7 Connections"}),"\n",(0,i.jsx)(n.p,{children:"Right-clicking a connection shows the following menu."}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Item"}),(0,i.jsx)(n.th,{children:"Behavior"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"TO STEP EDGE"})}),(0,i.jsx)(n.td,{children:"Clears the stored route so the automatic orthogonal (step) router draws it again. Shown only when a stored route exists"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"TO STRAIGHT"})}),(0,i.jsx)(n.td,{children:"Joins the two endpoints with a straight line. Not shown when the connection is already straight"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"DISCONNECT"})}),(0,i.jsx)(n.td,{children:"Disconnects"})]})]})]}),"\n",(0,i.jsx)(n.p,{children:"All three items apply equally to SwConnector connections and to InterfaceMapping connections.\nRight-clicking a waypoint handle on a connection opens the same menu."}),"\n",(0,i.jsx)(n.h2,{id:"86-connecting-ports",children:"8.6 Connecting Ports"}),"\n",(0,i.jsx)(n.p,{children:"You can create a connection in two ways: by dragging and from the menu."}),"\n",(0,i.jsx)(n.p,{children:"To create one by dragging, follow these steps."}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["Hold ",(0,i.jsx)(n.code,{children:"Shift"})," and drag from a port. A preview line follows the pointer, valid drop targets are\nhighlighted in green, and invalid ones in red."]}),"\n",(0,i.jsxs)(n.li,{children:["Release the button over the target. The result depends on where you release.","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Over a compatible counterpart port \u2192 the two ports are connected."}),"\n",(0,i.jsx)(n.li,{children:"Over the body of an SWC \u2192 a matching port is created automatically and connected."}),"\n",(0,i.jsx)(n.li,{children:"Over an InterfaceMapping node \u2192 the port is connected to that node."}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Click the connection to check the result. The connection exists if a ",(0,i.jsx)(n.strong,{children:"Basic Info"})," section\nappears in the properties panel on the right."]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Dragging without ",(0,i.jsx)(n.code,{children:"Shift"})," ",(0,i.jsx)(n.strong,{children:"moves"})," the item instead of connecting it."]}),"\n",(0,i.jsxs)(n.p,{children:["To use the menu, right-click the port and choose the counterpart from the ",(0,i.jsx)(n.strong,{children:"CONNECT TO"})," /\n",(0,i.jsx)(n.strong,{children:"CONNECT TO MAPPING"})," submenu (8.5.5)."]}),"\n",(0,i.jsx)(n.h2,{id:"87-properties-panel-right",children:"8.7 Properties Panel (Right)"}),"\n",(0,i.jsxs)(n.p,{children:["The fields and accordion sections shown depend on what you select. When nothing is selected,\n",(0,i.jsx)(n.code,{children:"Select an element to view properties"})," appears."]}),"\n",(0,i.jsx)(n.h3,{id:"swc--composition-node",children:"SWC / Composition Node"}),"\n",(0,i.jsx)(n.p,{children:"Selecting an SWC or a composition node shows the following fields."}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Field/Section"}),(0,i.jsx)(n.th,{children:"Contents"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Name"})}),(0,i.jsx)(n.td,{children:"The SHORT-NAME of the SWC type"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"AS Prototype"})}),(0,i.jsx)(n.td,{children:"The prototype SHORT-NAME inside this composition"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Description"})}),(0,i.jsx)(n.td,{children:"The description (multi-line)"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Ports"})}),(0,i.jsxs)(n.td,{children:["The port list. Each row consists of a direction badge (",(0,i.jsx)(n.code,{children:"P"})," / ",(0,i.jsx)(n.code,{children:"R"})," / ",(0,i.jsx)(n.code,{children:"PR"}),"), the name, and the PortInterface name. ",(0,i.jsx)(n.code,{children:"(none)"})," when no interface is set. Clicking a row selects that port, and the ",(0,i.jsx)(n.code,{children:"\xd7"})," at the end of the row deletes it. ",(0,i.jsx)(n.code,{children:"No ports available"})," when there is no port"]}
1)]})]})]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"The properties panel with an SWC node selected",src:s(9702).A+"",width:"1875",height:"1250"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.em,{children:["The screen with the Atomic SWC ",(0,i.jsx)(n.code,{children:"WheelButtonHandler"})," selected. The panel title changes to ",(0,i.jsx)(n.strong,{children:"APPLICATION"}),", and ",(0,i.jsx)(n.strong,{children:"Ports"})," shows ",(0,i.jsx)(n.code,{children:"RpWheelButtons"})," with an ",(0,i.jsx)(n.code,{children:"R"})," badge and ",(0,i.jsx)(n.code,{children:"PpWheelButtonStatus"})," with a ",(0,i.jsx)(n.code,{children:"P"})," badge, each next to its PortInterface name."]})}),"\n",(0,i.jsx)(n.h3,{id:"port-node",children:"Port Node"}),"\n",(0,i.jsx)(n.p,{children:"Selecting a port shows the following fields."}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Field/Section"}),(0,i.jsx)(n.th,{children:"Contents"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Name"})}),(0,i.jsx)(n.td,{children:"The port SHORT-NAME"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Port Interface"})}),(0,i.jsxs)(n.td,{children:["A searchable reference drop-down plus a ",(0,i.jsx)(n.code,{children:"[+]"})," button that creates a new interface. Clearing it shows the ",(0,i.jsx)(n.code,{children:"Port-Interface is required"})," error"]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"ComSpec section"}),(0,i.jsx)(n.td,{children:"One section is attached according to the interface category, as in the table below"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Data Mapping"})}),(0,i.jsx)(n.td,{children:"Appears only for a composition boundary port that has data elements"})]})]})]}),"\n",(0,i.jsx)(n.p,{children:"The ComSpec section name depends on the interface category as follows."}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Interface category"}),(0,i.jsx)(n.th,{children:"ComSpec section name"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Sender-Receiver"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Data Element"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Client-Server"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Operation"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Service"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Service ComSpec"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Mode-Switch"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Mode Group"})})]})]})]}),"\n",(0,i.jsx)(n.p,{children:"You edit the initial value (Init Value) with the shared ValueSpecEditor widget."}),"\n",(0,i.jsxs)(n.p,{children:["The candidates in the ",(0,i.jsx)(n.strong,{children:"Port Interface"})," drop-down are filtered by the parent SWC kind as follows."]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Parent SWC kind"}),(0,i.jsx)(n.th,{children:"Candidates"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Adaptive Application"}),(0,i.jsx)(n.td,{children:"ServiceInterface plus the whole AP family (with the direction constraints below applied)"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Composition"}),(0,i.jsx)(n.td,{children:"Everything except the AP family (ServiceInterface and the CP family)"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Any other Atomic SWC"}),(0,i.jsx)(n.td,{children:"Only the three: Sender-Receiver \xb7 Client-Server \xb7 Mode-Switch"})]})]})]}),"\n",(0,i.jsx)(n.p,{children:"Adaptive Application ports also get a direction constraint. The port directions you can choose per\ninterface are the following."}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Interface"}),(0,i.jsx)(n.th,{children:"Selectable port directions"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"ServiceInterface"}),(0,i.jsx)(n.td,{children:"PPort \xb7 RPort (not offered on a PRPort)"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"PhmRecoveryNotification \xb7 SynchronizedTimeBaseProvider \xb7 NetworkManagement \xb7 IdsmTimestampProvider \xb7 IdsmContextProvider"}),(0,i.jsx)(n.td,{children:"PPort"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"The two Persistency interfaces (KeyValueStorage \xb7 FileStorage)"}),(0,i.jsx)(n.td,{children:"PPort \xb7 RPort \xb7 PRPort"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"The whole rest of the AP family (LogAndTrace \xb7 the four SM interfaces \xb7 PhmSupervisedEntity \xb7 SynchronizedTimeBaseConsumer \xb7 the five Crypto interfaces \xb7 the four RDS interfaces \xb7 the remaining three IDSM interfaces)"}),(0,i.jsx)(n.td,{children:"RPort"})]})]})]}),"\n",(0,i.jsxs)(n.p,{children:["Each item in the list carries a kind prefix, such as ",(0,i.jsx)(n.code,{children:"SenderReceiver:"}),", ",(0,i.jsx)(n.code,{children:"Service:"}),",\n",(0,i.jsx)(n.code,{children:"SM.StateClient:"}
1),", or ",(0,i.jsx)(n.code,{children:"Crypto.KeySlot:"}),"."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"The properties panel with a port selected",src:s(5051).A+"",width:"1875",height:"1250"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.em,{children:["The screen with the port ",(0,i.jsx)(n.code,{children:"RpWheelButtons"})," selected. The panel title is ",(0,i.jsx)(n.strong,{children:"RPORT"}),", and ",(0,i.jsx)(n.strong,{children:"Port Interface"})," holds ",(0,i.jsx)(n.code,{children:"SenderReceiver: IfWheelButtons"})," with its kind prefix. The interface is Sender-Receiver, so the ComSpec section is named ",(0,i.jsx)(n.strong,{children:"DATA ELEMENT"})," and shows one row reading ",(0,i.jsx)(n.code,{children:"uint8"})," / ",(0,i.jsx)(n.code,{children:"Buttons"})," / ",(0,i.jsx)(n.code,{children:"NON-QUEUED"}),"."]})}),"\n",(0,i.jsx)(n.h3,{id:"connections",children:"Connections"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.strong,{children:"Basic Info"})," section has a single ",(0,i.jsx)(n.strong,{children:"Name"})," field."]}),"\n",(0,i.jsx)(n.h3,{id:"interfacemapping-node",children:"InterfaceMapping Node"}),"\n",(0,i.jsx)(n.p,{children:"Selecting an InterfaceMapping node shows the following fields."}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Field/Section"}),(0,i.jsx)(n.th,{children:"Contents"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Name"})}),(0,i.jsx)(n.td,{children:"The mapping SHORT-NAME"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Description"})}),(0,i.jsx)(n.td,{children:"The description"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Interfaces"})}),(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.strong,{children:"Service Interface"})," (read-only) plus the ",(0,i.jsx)(n.code,{children:"Mapped Port Interfaces"})," list"]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Event Mappings"})}),(0,i.jsx)(n.td,{children:"Service event \u2192 SR data element"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Method Mappings"})}),(0,i.jsxs)(n.td,{children:["Service method \u2192 CS operation. Fire&Forget methods carry an ",(0,i.jsx)(n.code,{children:"F&F"})," badge"]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Field Mappings"})}),(0,i.jsx)(n.td,{children:"Service field \u2192 Notifier / Getter / Setter"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Connected Ports"})}),(0,i.jsx)(n.td,{children:"The list of ports connected to this node"})]})]})]}),"\n",(0,i.jsxs)(n.p,{children:["When the service interface is not resolved yet,\n",(0,i.jsx)(n.code,{children:"Connect to a ServiceInterface port to configure element-level mappings."})," appears in place of the\nelement-level mapping sections."]}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsx)(n.p,{children:"Selecting something in the properties panel does not change the model. Even when an empty row is\nalready visible in a mapping table, it is only a skeleton for display; the actual value is\nrecorded the first time you edit it."}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"88-swc-internal-behavior-dialog",children:"8.8 SWC Internal Behavior Dialog"}),"\n",(0,i.jsxs)(n.p,{children:["This dialog opens when you double-click an Application, Complex Device Driver, Service,\nEcu Abstraction, or Sensor Actuator node. The title is ",(0,i.jsx)(n.code,{children:"SWC Internal Behavior [<SWC name>]"}),". The\nleft side is an SVG canvas and the right side is a properties panel."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"The SWC Internal Behavior dialog",src:s(2332).A+"",width:"1875",height:"1250"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.em,{children:["The dialog opened by double-clicking ",(0,i.jsx)(n.code,{children:"WheelButtonHandler"}),". The canvas on the left holds the SWC body, the ports attached to both of its sides, and two Runnables inside it. The right side has the same layout as the properties panel shown earlier."]})}),"\n",(0,i.jsx)(n.h3,{id:"right-clicking-the-canvas",children:"Right-Clicking the Canvas"}),"\n",(0,i.jsx)(n.p,{children:"The menu changes with what you right-click. The items per target are the following."}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Right-click target"}),(0,i.jsx)(n.th,{children:"Items"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"The SWC body"}),(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.strong,{children:"ADD Port"})," \u25B8 ",(0,i.jsx)(n.strong,{children:"PPort"})," / ",(0,i.jsx)(n.strong,{children:"RPort"})," / ",(0,i.jsx)(n.strong,{children:"PRPort"}),", ",(0,i.jsx)(n.strong,{children:"ADD RUNNABLE"}),", ",(0,i.jsx)(n.strong,{children:"ADD IRV"})]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"A port"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"DELETE"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"A Runnable"}),(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.strong,{children:"ADD RTEEvent"})," \u25B8 the seven RTE events, ",(0,i.jsx)(n.strong,{children:"DEL RUNNABLE"})]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"An RTE event icon on a Runnable"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"DEL EVENT"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"An IRV"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"DELETE IRV"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"An ITP"}),(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.strong,{children:"Add Triggered Runnable"})," \u25B8 the candidate Runnable list (the item itself disappears when there is no candidate), ",(0,i.jsx)(n.strong,{children:"DELETE ITP"})]})]})]})]}),"\n",(0,i.jsxs)(n.p,{children:["Selecting an element on the canvas and pressing ",(0,i.jsx)(n.code,{children:"Delete"})," or ",(0,i.jsx)(n.code,{children:"Backspace"})," deletes the selected port,\nRunnable, IRV, or ITP (it is ignored while an input field has focus)."]}),"\n",(0,i.jsx)(n.h3,{id:"runnable-properties",children:"Runnable Properties"}
1),"\n",(0,i.jsxs)(n.p,{children:["Selecting a Runnable sets the title of the right panel to ",(0,i.jsx)(n.code,{children:"Runnable"})," and shows the basic fields in a\n2\xd72 grid. Each field means the following."]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Field"}),(0,i.jsx)(n.th,{children:"Description"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"NAME"})}),(0,i.jsxs)(n.td,{children:["The AUTOSAR SHORT-NAME. A duplicate within the same SWC shows the ",(0,i.jsx)(n.code,{children:"A runnable with this name already exists"})," error and is not committed"]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"SYMBOL"})}),(0,i.jsx)(n.td,{children:"The C function name in the generated code (C-IDENTIFIER)"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"CAN BE INVOKED"})}),(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.strong,{children:"TRUE"})," / ",(0,i.jsx)(n.strong,{children:"FALSE"})]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"MIN START INTERVAL"})}),(0,i.jsx)(n.td,{children:"The minimum start interval (0 or greater)"})]})]})]}),"\n",(0,i.jsxs)(n.p,{children:["Below them are two accordion sections, ",(0,i.jsx)(n.strong,{children:"Access Points"})," and ",(0,i.jsx)(n.strong,{children:"RTE Events"}),". Clicking the ",(0,i.jsx)(n.code,{children:"+"}),"\nbutton in either section header opens a kind-selection menu."]}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"+"})," menu of ",(0,i.jsx)(n.strong,{children:"RTE Events"})," offers seven events. The ",(0,i.jsx)(n.strong,{children:"ADD RTEEvent"})," submenu you get by\nright-clicking a Runnable node offers the same seven."]}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.strong,{children:"TimingEvent"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.strong,{children:"Backgroun
1dEvent"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.strong,{children:"DataReceivedEvent"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.strong,{children:"OperationInvokedEvent"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.strong,{children:"SwcModeSwitchEvent"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.strong,{children:"InitEvent"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.strong,{children:"InternalTriggeredEvent"})}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"+"})," menu of ",(0,i.jsx)(n.strong,{children:"Access Points"})," offers ten items: the nine access points plus\n",(0,i.jsx)(n.strong,{children:"InternalTriggeringPoint"}),"."]}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.strong,{children:"DataSendPoint"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.strong,{children:"DataReceivedPoint"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.strong,{children:"SyncServerCallPoint"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.strong,{children:"DataWriteAccess"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.strong,{children:"DataReadAccess"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.strong,{children:"WrittenLocalVariable"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.strong,{children:"ReadLocalVariable"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.strong,{children:"ModeSwitchPoint"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.strong,{children:"ModeAccessPoint"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.strong,{children:"InternalTriggeringPoint"})}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"InternalTriggeringPoint"})," sits in the same ",(0,i.jsx)(n.code,{children:"+"})," menu as the access point list, but it is stored as\na separate element owned by the Runnable rather than as a VARIABLE-ACCESS. Create an\nInternalTriggeredEvent from the RTE event menu first, then choose which ITP to bind it to in the\n",(0,i.jsx)(n.strong,{children:"INTERNAL TRIGGERING POINT"})," field of the detail panel."]}),"\n",(0,i.jsxs)(n.p,{children:["Selecting an access point or an RTE event shows the detail fields for that kind below. Examples are\n",(0,i.jsx)(n.strong,{children:"LOCAL VARIABLE"}),", ",(0,i.jsx)(n.strong,{children:"MODE GROUP"}),", ",(0,i.jsx)(n.strong,{children:"TIMEOUT"}),", ",(0,i.jsx)(n.strong,{children:"PERIOD"}),", ",(0,i.jsx)(n.strong,{children:"OFFSET"}),", ",(0,i.jsx)(n.strong,{children:"R-PORT"})," / ",(0,i.jsx)(n.strong,{children:"P-PORT"}),",\n",(0,i.jsx)(n.strong,{children:"DATA ELEMENT"}),", ",(0,i.jsx)(n.strong,{children:"OPERATION"}),", and ",(0,i.jsx)(n.strong,{children:"TARGET MODE"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["Holding ",(0,i.jsx)(n.code,{children:"Shift"})," and dragging from a port onto a Runnable shows a menu that c
1ontains only the items\nmatching the direction and the interface category of that port. For example, a P-Port with\nSender-Receiver suggests DataSendPoint and DataWriteAccess, an R-Port with Client-Server suggests\nSyncServerCallPoint, and a P-Port with Client-Server suggests OperationInvokedEvent. Dragging an IRV\nonto a Runnable the same way shows a menu offering ",(0,i.jsx)(n.strong,{children:"READ"})," or ",(0,i.jsx)(n.strong,{children:"WRITE"}),", and the local variable\naccess point that matches your choice is created."]}),"\n",(0,i.jsx)(n.h2,{id:"89-aa-internal-behavior-dialog-adaptive-application",children:"8.9 AA Internal Behavior Dialog (Adaptive Application)"}),"\n",(0,i.jsxs)(n.p,{children:["This dialog opens when you double-click an Adaptive Application node. The title is\n",(0,i.jsx)(n.code,{children:"AA Internal Behavior [<node name>]"}),". The panel on the right has two tabs."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Adaptive Application nodes inside a composition",src:s(7276).A+"",width:"1875",height:"1250"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.em,{children:"The target that opens this dialog. An Adaptive Application node is drawn in a different color from other SWCs, and the half-circle ports on its right edge are AP family interfaces."})}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Tab"}),(0,i.jsx)(n.th,{children:"Contents"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"PROPERTIES"})}),(0,i.jsxs)(n.td,{children:["Executable information \u2014 ",(0,i.jsx)(n.strong,{children:"NAME"}),", ",(0,i.jsx)(n.strong,{children:"ROOT SWC PROTOTYPE"}),", the category (",(0,i.jsx)(n.strong,{children:"APPLICATION"})," / ",(0,i.jsx)(n.strong,{children:"PLATFORM"}),"), the build type (",(0,i.jsx)(n.strong,{children:"DEBUG"})," / ",(0,i.jsx)(n.strong,{children:"RELEASE"}),"), ",(0,i.jsx)(n.strong,{children:"VERSION"}),", and ",(0,i.jsx)(n.strong,{children:"MINIMUM TIMER GRANULARITY"}),". Selecting a mapping box shows the properties of that box instead"]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"EXECUTION"})}),(0,i.jsxs)(n.td,{children:["The Process list. Expanding a process row shows ",(0,i.jsx)(n.strong,{children:"NAME"})," and the four subsections below"]})]})]})]}),"\n",(0,i.jsxs)(n.p,{children:["The subsections of a process row on the ",(0,i.jsx)(n.strong,{children:"EXECUTION"})," tab are the following."]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Subsection"}),(0,i.jsx)(n.th,{children:"Items"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"STARTUP CONFIG"})}),(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.strong,{children:"ENTER TIMEOUT"}),", ",(0,i.jsx)(n.strong,{children:"EXIT TIMEOUT"}),", ",(0,i.jsx)(n.strong,{children:"CPU USAGE"}),", ",(0,i.jsx)(n.strong,{children:"MEM USAGE"}),", ",(0,i.jsx)(n.strong,{children:"SCHEDULING POLICY"}),", ",(0,i.jsx)(n.strong,{children:"SCHEDULING PRIORITY"}),", ",(0,i.jsx)(n.strong,{children:"EXECUTION ERROR"}),", ",(0,i.jsx)(n.strong,{children:"TERMINATION BEHAVIOR"})]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"FUNCTION GROUP STATE"})}),(0,i.jsxs)(n.td,{children:["A list of ",(0,i.jsx)(n.code,{children:"function group : state"})," rows. Add one with the ",(0,i.jsx)(n.code,{children:"+"})," in the header and remove one with the ",(0,i.jsx)(n.code,{children:"\xd7"})," at the end of the row. ",(0,i.jsx)(n.code,{children:"No function group states defined"})," when it is empty"]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"EXECUTION DEPENDENCY"})}),(0,i.jsxs)(n.td,{children:["A list of ",(0,i.jsx)(n.code,{children:"process : state"})," rows. ",(0,i.jsx)(n.code,{children:"No execution dependencies defined"})," when it is empty"]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"LOG CONFIG"})}),(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.strong,{children:"APPLICATION ID"}),", ",(0,i.jsx)(n.strong,{children:"APPLICATION DESCRIPTION"}),", ",(0,i.jsx)(n.strong,{children:"DEFAULT LOG LEVEL"}),", ",(0,i.jsx)(n.strong,{children:"LOG MODE"}),", and ",(0,i.jsx)(n.strong,{children:"CONTEXT ID"})," / ",(0,i.jsx)(n.strong,{children:"CONTEXT DESCRIPTION"})," per DLT context"]})]})]})]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"The EXECUTION tab of the AA Internal Behavior dialog",src:s(1788).A+"",width:"1875",height:"1250"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.em,{children:["The dialog opened by double-clicking ",(0,i.jsx)(n.code,{children:"Camera"}),", with the ",(0,i.jsx)(n.strong,{children:"EXECUTION"})," tab selected. ",(0,i.jsx)(n.strong,{children:"EXECUTABLE"})," at the top holds segments such as the category and the build type, and ",(0,i.jsx)(n.strong,{children:"PROCESS"})," below it holds the process list. The green box on the left canvas is a PHM supervision target."]})}),"\n",(0,i.jsx)(n.h3,{id:"right-clicking-the-canvas-the-aa-body",children:"Right-Clicking the Canvas (the AA Body)"}),"\n",(0,i.jsx)(n.p,{children:"Right-clicking the AA body shows the following menu."}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Item"}),(0,i.jsx)(n.th,{children:"Behavior"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.strong,{children:"ADD Port"})," \u25B8 ",(0,i.jsx)(n.strong,{children:"PPort"})," / ",(0,i.jsx)(n.strong,{children:"RPort"})," / ",(0,i.jsx)(n.strong,{children:"PRPort"})]}),(0,i.jsx)(n.td,{children:"Adds a port"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.strong,{children:"ADD Instance"})," \u25B8 function cluster \u25B8 item"]}),(0,i.jsx)(n.td,{children:"Adds an AP mapping box"})]})]})]}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.strong,{children:"ADD Instance"})," menu is grouped by AUTOSAR AP function cluster. There are 10 clusters and 22\nitems in total. Items whose condition is not met drop out of the menu, and ",(0,i.jsx)(n.strong,{children:"ara::crypto"}),"\ndisappears as a cluster when all four of its items drop out. The items and the display conditions\nper cluster are the following."]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Cluster"}),(0,i.jsx)(n.th,{children:"Item"}),(0,i.jsx)(n.th,{children:"Display condition"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"ara::com"})}),(0,i.jsx)(n.td,{children:"Service Instance"}),(0,i.jsx)(n.td,{children:"Always"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"ara::log"})}),(0,i.jsx)(n.td,{children:"DLT Sink"}),(0,i.jsx)(n.td,{children:"Always"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"ara::sm"})}),(0,i.jsx)(n.td,{children:"Function Group"}),(0,i.jsx)(n.td,{children:"Always"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"ara::phm"})}),(0,i.jsx)(n.td,{children:"Supervised Entity"}),(0,i.jsx)(n.td,{children:"When there is an HPC/Machine above it"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"ara::phm"})}),(0,i.jsx)(n.td,{children:"Recovery Notification"}),(0,i.jsx)(n.td,{children:"Always"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"ara::nm"})}),(0,i.jsx)(n.td,{children:"Network Handle"}),(0,i.jsxs)(n.td,{children:["The whole cluster appears only when the ",(0,i.jsx)(n.code,{children:"nm"})," module of the Machine has at least one NM network handle"]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"ara::tsync"})}),(0,i.jsx)(n.td,{children:"Time Base"}),(0,i.jsx)(n.td,{children:"The whole cluster appears only when the Machine has at least one TimeBaseResource"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"ara::crypto"})}),(0,i.jsx)(n.td,{children:"Crypto Key Slot / Crypto Certificate / Crypto Certificate Group / Crypto Provider"}),(0,i.jsxs)(n.td,{children:["Per item, when the ",(0,i.jsx)(n.code,{children:"crypto"})," module of the Machine has the matching element (Key Slot when a Provider with key slots exists)"]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"ara::idsm"})}),(0,i.jsx)(n.td,{children:"Timestamp Provider / Context Provider / Reporting Mode Provider / Qualified Event Receiver / Security Event"}),(0,i.jsxs)(n.td,{children:["The whole cluster appears only when the Machine has an ",(0,i.jsx)(n.code,{children:"idsm"})," module"]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"ara::per"})}),(0,i.jsx)(n.td,{children:"Key Value Storage / File Storage"}),(0,i.jsx)(n.td,{children:"Always"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"ara::rds"})}),(0,i.jsx)(n.td,{children:"Raw Data Stream Client / Raw Data Stream Server / Raw Data Stream IEEE1722 Consumer / Raw Data Stream IEEE1722 Producer"}),(0,i.jsx)(n.td,{children:"Always"})]})]})]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"ara::idsm"})," \u25B8 Timestamp Provider may be in the menu, but if the IDSM module of the Machine already\nhas an Ids Time Base assigned, the addition is rejected and a notice appears (the two cannot be used\nat the same time)."]}),"\n",(0,i.jsxs)(n.p,{children:["Right-clicking a mapping box shows ",(0,i.jsx)(n.strong,{children:"DEL Instance"}),", and right-clicking a port shows ",(0,i.jsx)(n.strong,{children:"DELETE"}),".\n",(0,i.jsx)(n.code,{children:"Shift"})," + drag from a port draws a connection to a mapping box."]}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsxs)(n.p,{children:["If a cluster with a condition is not visible, create the element of that module in the Machine\nConfiguration dialog (8.10) first. For example, if ",(0,i.jsx)(n.strong,{children:"ara::tsync"})," \u25B8 Time Base is missing, add one\ntime base under MODULE tab \u25B8 ",(0,i.jsx)(n.strong,{children:"TS"})," \u25B8 ",(0,i.jsx)(n.strong,{children:"TIME BASES"})," and open the menu again."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"810-machine-configuration-dialog-adaptive",children:"8.10 Machine Configuration Dialog (Adaptive)"}),"\n",(0,i.jsxs)(n.p,{children:["This dialog opens when you click the blue ",(0,i.jsx)(n.strong,{children:"HPC icon"})," on a composition node mapped to an HPC. It\nhas four tabs."]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Tab"}),(0,i.jsx)(n.th,{children:"Contents"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"MACHINE"})}),(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.strong,{children:"OS"})," (the SHORT-NAME of the OS module instance), ",(0,i.jsx)(n.strong,{children:"TRUSTED PLATFORM"})," (",(0,i.jsx)(n.strong,{children:"STRICT"})," / ",(0,i.jsx)(n.strong,{children:"MONITOR"})," / ",(0,i.jsx)(n.strong,{children:"NO SUPPORT"}),"), ",(0,i.jsx)(n.strong,{children:"DESCRIPTION"}),", and the ",(0,i.jsx)(n.strong,{children:"PROCESSOR"})," name with a two-column core table of ",(0,i.jsx)(n.code,{children:"Core"})," / ",(0,i.jsx)(n.code,{children:"Core ID"})]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"FUNCTION GROUP"})}),(0,i.jsxs)(n.td,{children:["The ",(0,i.jsx)(n.strong,{children:"Function Groups"})," list on the left (",(0,i.jsx)(n.code,{children:"+"})," / ",(0,i.jsx)(n.code,{children:"\u2212"})," / ",(0,i.jsx)(n.code,{children:"\u26A1"}),"), ",(0,i.jsx)(n.strong,{children:"CONFIGURATION"})," in the middle (",(0,i.jsx)(n.strong,{children:"Name"})," \xb7 ",(0,i.jsx)(n.strong,{children:"Description"})," \xb7 ",(0,i.jsx)(n.strong,{children:"MODE DECLARATION"}),"), and the state machine diagram on the right"]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"PROCESSES"})}),(0,i.jsxs)(n.td,{children:["Shows the Adaptive Application processes of this composition in three panes: the ",(0,i.jsx)(n.strong,{children:"Processes"})," list on the left, the details in the middle, and the process graph on the right (8.10.2)"]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"MODULE"})}),(0,i.jsx)(n.td,{children:"AP function cluster module configuration (8.10.1)"})]})]})]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"The MACHINE tab of the Machine Configuration dialog",src:s(8647).A+"",width:"1875",height:"1250"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.em,{children:["The four tabs, with the first one, ",(0,i.jsx)(n.strong,{children:"MACHINE"}),", open. ",(0,i.jsx)(n.strong,{children:"TRUSTED PLATFORM"})," is ",(0,i.jsx)(n.strong,{children:"NO SUPPORT"}),", one of its three values, and ",(0,i.jsx)(n.strong,{children:"PROCESSOR"})," holds the single ",(0,i.jsx)(n.code,{children:"CPU"})," / ",(0,i.jsx)(n.code,{children:"Core0"})," (Core ID 0) entry filled in automatically as described below. The ",(0,i.jsx)(n.strong,{children:"PARA Platform"})," button at the top right is covered in 8.11."]})}),"\n",(0,i.jsx)(n.p,{children:"The elements the dialog needs are filled
1in automatically when it opens."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["If the ",(0,i.jsx)(n.strong,{children:"MachineFG"})," function group is missing, it is created. This group cannot be deleted, and\nfive of its mode declarations \u2014 ",(0,i.jsx)(n.code,{children:"Off"}),", ",(0,i.jsx)(n.code,{children:"Startup"}),", ",(0,i.jsx)(n.code,{children:"Shutdown"}),", ",(0,i.jsx)(n.code,{children:"Restart"}),", and ",(0,i.jsx)(n.code,{children:"Verify"})," \u2014 cannot be\nremoved."]}),"\n",(0,i.jsxs)(n.li,{children:["If the ten module instances are missing, they are created with the fixed names ",(0,i.jsx)(n.code,{children:"LOG"}),", ",(0,i.jsx)(n.code,{children:"CM"}),", ",(0,i.jsx)(n.code,{children:"SM"}),",\n",(0,i.jsx)(n.code,{children:"NM"}),", ",(0,i.jsx)(n.code,{children:"PHM"}),", ",(0,i.jsx)(n.code,{children:"TIME_SYNC"}),", ",(0,i.jsx)(n.code,{children:"CRYPTO"}),", ",(0,i.jsx)(n.code,{children:"PERSISTENCY"}),", ",(0,i.jsx)(n.code,{children:"IDSM"}),", and ",(0,i.jsx)(n.code,{children:"UCM"}),". The MODULE tab therefore\nalways shows all ten."]}),"\n",(0,i.jsxs)(n.li,{children:["If processor information is missing, it is filled in with a single ",(0,i.jsx)(n.code,{children:"CPU"})," / ",(0,i.jsx)(n.code,{children:"Core0"})," (Core ID 0)."]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Adding a new Function Group creates a group whose initial mode is ",(0,i.jsx)(n.code,{children:"Off"}),". ",(0,i.jsx)(n.strong,{children:"MachineFG"})," cannot be\nrenamed. The ",(0,i.jsx)(n.code,{children:"\u26A1"})," button on the FUNCTION GROUP tab re-aligns the StateClient interfaces and the\nR-Ports of the SM SWC with the current function group list. If no HPC is connected yet, a notice\nasks you to save once first. On a successful run the result appears in a notice dialog. When nothing\nchanged it reads\n",(0,i.jsx)(n.code,{children:"All StateClientInterfaces and SM SWC R-Ports are already in sync with the configured Function Groups."}),",\nand when something changed it reads\n",(0,i.jsx)(n.code,{children:"Synchronized StateClientInterface and SM SWC R-Ports: 2 created, 1 removed."})]}),"\n",(0,i.jsxs)(n.p,{children:["Deleting a function group with ",(0,i.jsx)(n.code,{children:"\u2212"})," opens a ",(0,i.jsx)(n.strong,{children:"Delete Function Group"})," confirmation dialog first. The\nbody tells you that the StateClient interfaces generated from that group are removed from the\nInterface editor as well. ",(0,i.jsx)(n.strong,{children:"MachineFG"})," cannot be deleted with this button either."]}),"\n",(0,i.jsxs)(n.p,{children:["If the PROCESSES tab has no process,\n",(0,i.jsx)(n.code,{children:"No Adaptive Application processes found in this Composition"})," appears; if no process is selected,\n",(0,i.jsx)(n.code,{children:"Select a process"})," appears. If the MACHINE tab has no core,\n",(0,i.jsx)(n.code,{children:"No processor cores defined in MACHINE tab"})," appears in place of ",(0,i.jsx)(n.strong,{children:"CORE AFFINITY"}),"."]}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsx)(n.p,{children:"This dialog has many features. The ten module instances are created automatically when the dialog\nopens, so at first you can edit only the cluster you need now and leave the rest alone."}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"8101-the-ten-modules-on-the-module-tab",children:"8.10.1 The Ten Modules on the MODULE Tab"}),"\n",(0,i.jsx)(n.p,{children:"Selecting a module in the list on the left shows an editing view in the middle and an overview\ncanvas on the right. Each module is made up as follows."}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Badge"}),(0,i.jsx)(n.th,{children:"Module"}),(0,i.jsx)(n.th,{children:"Middle editing view"}),(0,i.jsx)(n.th,{children:"Right overview"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"LOG"})}),(0,i.jsx)(n.td,{children:"Log and Trace"}),(0,i.jsxs)(n.td,{children:["A DLT ECU section plus the DLT APPLICATION table (",(0,i.jsx)(n.code,{children:"Process"})," / ",(0,i.jsx)(n.code,{children:"DLT Application ID"})," / ",(0,i.jsx)(n.code,{children:"Log Mode"})," / ",(0,i.jsx)(n.code,{children:"Default Log Level"}),")"]}),(0,i.jsx)(n.td,{children:"A DLT hierarchy viewer (DltEcu \u2192 DltApplication \u2192 DltContext)"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"CM"})}),(0,i.jsx)(n.td,{children:"Communication Management"}),(0,i.jsxs)(n.td,{children:["The ",(0,i.jsx)(n.strong,{children:"ACCESS CONTROL"})," + ",(0,i.jsx)(n.strong,{children:"GRANTS"})," accordions"]}),(0,i.jsx)(n.td,{children:"None"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"SM"})}),(0,i.jsx)(n.td,{children:"State Management"}),(0,i.jsxs)(n.td,{children:["Three subtabs: ",(0,i.jsx)(n.strong,{children:"NOTIFICATIONS"})," / ",(0,i.jsx)(n.strong,{children:"REQUESTS"})," / ",(0,i.jsx)(n.strong,{children:"ACTION ITEMS"})]}),(0,i.jsx)(n.td,{children:"A state machine and wiring diagram"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"NM"})}),(0,i.jsx)(n.td,{children:"Network Management"}),(0,i.jsxs)(n.td,{children:["The ",(0,i.jsx)(n.strong,{children:"NETWORK HANDLES"})," subtab (Name / VLANs / Partial Networks per handle)"]}),(0,i.jsx)(n.td,{children:"The NM state machine of the selected handle"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"PHM"})}),(0,i.jsx)(n.td,{children:"Platform Health Management"}),(0,i.jsxs)(n.td,{children:["Two subtabs: ",(0,i.jsx)(n.strong,{children:"CHECK POINTS"})," / ",(0,i.jsx)(n.strong,{children:"GLOBAL SUPERVISIONS"})]}),(0,i.jsx)(n.td,{children:"A supervision checkpoint transition diagram"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"TS"})}),(0,i.jsx)(n.td,{children:"Time Synchronization"}),(0,i.jsxs)(n.td,{children:["The ",(0,i.jsx)(n.strong,{children:"TIME BASES"})," subtab (choose Provider or Consumer, then create)"]}),(0,i.jsx)(n.td,{children:"A GlobalTime hub-and-spoke diagram"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"CRY"})}),(0,i.jsx)(n.td,{children:"Cryptography"}),(0,i.jsxs)(n.td,{children:["Three subtabs: ",(0,i.jsx)(n.strong,{children:"PROVIDERS"})," / ",(0,i.jsx)(n.strong,{children:"CERTIFICATES"})," / ",(0,i.jsx)(n.strong,{children:"CERT GROUPS"})]}),(0,i.jsx)(n.td,{children:"None"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"PER"})}),(0,i.jsx)(n.td,{children:"Persistency"}),(0,i.jsxs)(n.td,{children:["Two subtabs: ",(0,i.jsx)(n.strong,{children:"KEY VALUE STORAGES"})," / ",(0,i.jsx)(n.strong,{children:"FILE STORAGES"})]}),(0,i.jsx)(n.td,{children:"None"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"IDS"})}),(0,i.jsx)(n.td,{children:"Intrusion Detection"}),(0,i.jsxs)(n.td,{children:["The ",(0,i.jsx)(n.code,{children:"Network Endpoint"})," section (with ",(0,i.jsx)(n.code,{children:"Remote Configs"})," beneath it), ",(0,i.jsx)(n.code,{children:"Ids Time Base"}),", and ",(0,i.jsx)(n.code,{children:"Reportable Security Events"})]}),(0,i.jsx)(n.td,{children:"None"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"UCM"})}),(0,i.jsx)(n.td,{children:"Update and Configuration Management"}),(0,i.jsxs)(n.td,{children:["Two subtabs: ",(0,i.jsx)(n.strong,{children:"VUCM"})," (UCM Master) / ",(0,i.jsx)(n.strong,{children:"UCM"})," (UCM Subordinate)"]}),(0,i.jsx)(n.td,{children:"None"})]})]})]}),"\n",(0,i.jsxs)(n.p,{children:["For a module with no overview, ",(0,i.jsx)(n.code,{children:"No overview for this module"})," appears on the right."]}),"\n",(0,i.jsxs)(n.p,{children:["On the ",(0,i.jsx)(n.strong,{children:"ACTION ITEMS"})," subtab of ",(0,i.jsx)(n.strong,{children:"SM"})," you can drag item cards to change their order within the\nlist. The new order is recorded in the model as it is and carried into the export as it is, and a\nsingle undo reverts the reordering."]}),"\n",(0,i.jsxs)(n.p,{children:["Each storage row of ",(0,i.jsx)(n.strong,{children:"PER"})," has a ",(0,i.jsx)(n.code,{children:"\u26A1"})," ",(0,i.jsx)(n.strong,{children:"Derive PersistencyInterface"})," action. Running it builds a\nPersistency interface from the storage contents and adds it to the INTERFACE model of the Interface\neditor (see ",(0,i.jsx)(n.a,{href:"/docs/paio/editors/interface-editor",children:"09. Interface Editor"}),")."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"UCM"})," has no SHORT-NAME field, because the export uses fixed standard names."]}),"\n",(0,i.jsx)(n.h3,{id:"8102-the-processes-tab",children:"8.10.2 The PROCESSES Tab"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.strong,{children:"Processes"})," list on the left names every process of the Adaptive Applications in this\ncomposition as ",(0,i.jsx)(n.code,{children:"<AA name>/<process name>"}),". Selecting a process fills the detail panel in the middle\nin the following order."]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Area"}),(0,i.jsx)(n.th,{children:"Contents"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"CORE AFFINITY"})}),(0,i.jsxs)(n.td,{children:["Chooses which core this process is pinned to. It is ",(0,i.jsx)(n.strong,{children:"the only editable value"})," in the body of the detail panel"]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Adaptive Application information"}),(0,i.jsx)(n.td,{children:"Information about the AA node that owns the process (read-only)"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"STARTUP CONFIG"})}),(0,i.jsx)(n.td,{children:"The startup configuration (read-only)"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"FUNCTION GROUP STATE"})}),(0,i.jsxs)(n.td,{children:["A list of ",(0,i.jsx)(n.code,{children:"function group : state"}),". ",(0,i.jsx)(n.code,{children:"No FG states configured"})," when it is empty"]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"EXECUTION DEPENDENCY"})}),(0,i.jsxs)(n.td,{children:["The execution dependency list. ",(0,i.jsx)(n.code,{children:"No execution dependencies"})," when it is empty"]})]})]})]}),"\n",(0,i.jsx)(n.p,{children:"The panel on the right draws the process graph. It places each process as a box and joins the\nfunction group states and the execution dependencies with lines."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Assigning a Function Cluster (Mark as SM / Mark as PHM)"})}),"\n",(0,i.jsxs)(n.p,{children:["There are two buttons at the right of the detail panel header. They assign the AP function cluster\n
1affiliation (",(0,i.jsx)(n.code,{children:"functionClusterAffiliation"}),") of a process, and within one Machine each affiliation can\nhave only one process."]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Button"}),(0,i.jsx)(n.th,{children:"Value assigned"}),(0,i.jsx)(n.th,{children:"Once assigned"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.strong,{children:"Mark as SM"})," / ",(0,i.jsx)(n.strong,{children:"Unmark as SM"})]}),(0,i.jsx)(n.td,{children:"State Management"}),(0,i.jsxs)(n.td,{children:["A ",(0,i.jsx)(n.strong,{children:"STATE_MANAGEMENT"})," badge appears in the header"]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.strong,{children:"Mark as PHM"})," / ",(0,i.jsx)(n.strong,{children:"Unmark as PHM"})]}),(0,i.jsx)(n.td,{children:"Platform Health Management"}),(0,i.jsxs)(n.td,{children:["A ",(0,i.jsx)(n.strong,{children:"PLATFORM_HEALTH_MANAGEMENT"})," badge appears in the header"]})]})]})]}),"\n",(0,i.jsxs)(n.p,{children:["Clicking the ",(0,i.jsx)(n.code,{children:"\xd7"})," inside the badge also clears the assignment."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Assigning SM also creates the wiring."})," ",(0,i.jsx)(n.strong,{children:"Mark as SM"})," does not only record the affiliation value;\nit also creates a StateClient R-Port and a FunctionGroupPortMapping on the SM SWC for every current\nfunction group. Clearing it removes that wiring again. That is why clearing and reassigning come\nwith a confirmation dialog. The dialogs per situation are the following."]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Situation"}),(0,i.jsx)(n.th,{children:"Confirmation dialog title"}),(0,i.jsx)(n.th,{children:"Confirm button"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Clearing the SM assignment"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Unmark as State Management"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Unmark"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.strong,{children:"Mark as SM"})," while another process is already SM"]}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Reassign State Management"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Reassign"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.strong,{children:"Mark as PHM"})," while another process is already PHM"]}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Reassign Platform Health Management"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Reassign"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.strong,{children:"Mark as PHM"})," on a process assigned as SM"]}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Process is State Management"})}),(0,i.jsx)(n.td,{children:"Cannot proceed. Only a notice asking you to clear SM first appears"})]})]})]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Assigning PHM creates no wiring."})," It records only the affiliation value, so both assigning and\nclearing take effect immediately without confirmation."]}),"\n",(0,i.jsxs)(n.p,{children:["Clearing an assignment removes ",(0,i.jsx)(n.strong,{children:"the R-Port and the FunctionGroupPortMapping of the SM SWC"})," and\nnothing more. The StateClient interface itself, created in the Interface editor, is left in place."]}),"\n",(0,i.jsxs)(n.p,{children:["Assigning, clearing, and reassigning are each recorded as ",(0,i.jsx)(n.strong,{children:"one entry in the VFB edit history"}),".\nEven when the wiring is created or removed once per function group, the entry is single, so one undo\nreverts all of it. Pressing ",(0,i.jsx)(n.code,{children:"Ctrl+Z"})," inside the dialog consumes the edit history of the dialog\nitself first (see ",(0,i.jsx)(n.a,{href:"/docs/paio/reference/shortcuts",children:"18.3"}),"), so to revert only an assignment or its\nclearing, close the dialog and then press ",(0,i.jsx)(n.code,{children:"Ctrl+Z"}),"."]}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Some items behave differently from what they show."})," The body of the SM clearing confirmation\ndialog ends with ",(0,i.jsx)(n.code,{children:"This action cannot be undone."}),", but in practice you can revert it with undo, as\ndescribed above."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"811-para-base-configuration",children:"8.11 PARA Base Configuration"}),"\n",(0,i.jsx)(n.p,{children:"This feature injects the PopcornSAR AUTOSAR Adaptive Platform base configuration into the project.\nThere are two ways to run it."}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["Click the ",(0,i.jsx)(n.strong,{children:"PARA Platform"})," button in the header of the Machine Configuration dialog. If the\ndialog has unsaved edits, it asks whether to save them first. Click ",(0,i.jsx)(n.strong,{children:"Import"})," in the\nconfirmation dialog and the dialog closes, then the injection starts (the injection is a\nproject-level undo unit, so it must run outside the internal edit transaction of the dialog)."]}),"\n",(0,i.jsxs)(n.li,{children:["Run ",(0,i.jsx)(n.strong,{children:"PARA: Import Platform"})," from the command palette."]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["The command palette path is handled by the active VFB editor, and it proceeds directly only when\n",(0,i.jsx)(n.strong,{children:"exactly one"})," composition is mapped to an HPC. Otherwise the toast\n",(0,i.jsx)(n.code,{children:"Select the target machine via the PARA Platform button in the Machine Configuration dialog."}
1),"\nappears. If no VFB editor is open,\n",(0,i.jsx)(n.code,{children:"Open a VFB editor with an HPC-mapped composition, or use the PARA Platform button in the Machine Configuration dialog."})," appears."]}),"\n",(0,i.jsxs)(n.p,{children:["The confirmation dialog is titled ",(0,i.jsx)(n.strong,{children:"Import PARA Platform"})," with the subtitle\n",(0,i.jsx)(n.code,{children:"PopcornSAR AUTOSAR Adaptive Platform"}),", and its buttons are ",(0,i.jsx)(n.strong,{children:"Cancel"})," / ",(0,i.jsx)(n.strong,{children:"Import"}),". The figures\nshown in the dialog are counted from the bundle each time. The values per item are the following."]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Item"}),(0,i.jsx)(n.th,{children:"Value in the bundle"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Applications"}),(0,i.jsx)(n.td,{children:"11 (CM, CSM, DM, EM, IDSM, NM, PHM, SM, TBM, UCM, VUCM)"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Service Interfaces"}),(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.code,{children:"8 (+1 SM)"})," \u2014 eight service interfaces plus one SM interface, ",(0,i.jsx)(n.code,{children:"StateClient_MachineFG"})]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Error Domains"}),(0,i.jsx)(n.td,{children:"4 (Com / Sm / Ucm / Vucm)"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Data Types"}),(0,i.jsx)(n.td,{children:"62"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Connectors"}),(0,i.jsxs)(n.td,{children:["5 (the connectors of the ",(0,i.jsx)(n.code,{children:"PARA"})," composition. This composition has 11 prototypes and three provided ports)"]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Machine"}),(0,i.jsxs)(n.td,{children:["The MachineFG function group plus seven module instances (",(0,i.jsx)(n.code,{children:"LOG"}),", ",(0,i.jsx)(n.code,{children:"CM"}),", ",(0,i.jsx)(n.code,{children:"SM"}),", ",(0,i.jsx)(n.code,{children:"NM"}),", ",(0,i.jsx)(n.code,{children:"PHM"}),", ",(0,i.jsx)(n.code,{children:"TIME_SYNC"}),", ",(0,i.jsx)(n.code,{children:"CRYPTO"}),")"]})]})]})]}),"\n",(0,i.jsx)(n.p,{children:"The confirmation dialog also shows the following two lines of notice."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Network binding (SOME/IP, DDS, IPC) is not included. Configure it in Deployment after adding."})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Existing items with different content will ask for per-item confirmation."})}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"The injection uses the same merge pipeline as an ARXML import. A conflict therefore opens the\nconflict resolution dialog, and the whole operation is recorded as a single undo unit. On success\nthe Machine Configuration dialog of the same machine reopens and shows the merged result of\nMachineFG and the modules."}),"\n",(0,i.jsxs)(n.p,{children:["The machine file in the bundle is not added as a separate machine. Only the function groups and\nmodule instances inside it are merged into the machine you selected, and identity fields such as the\nmachine name, the processor, and the OS are left untouched. The ",(0,i.jsx)(n.code,{children:"HPC/..."})," references in the bundle\nare rebound to the target machine name at injection time. The IVC and SIGNAL models are not in the\nbundle, so they stay as they are, and the SYSTEM model changes only as far as registering the target\nmachine as an HPC and recording the SWC-ECU mapping."]}),"\n",(0,i.jsx)(n.h2,{id:"812-ecu-configuration-dialog-classic",children:"8.12 ECU Configuration Dialog (Classic)"}),"\n",(0,i.jsxs)(n.p,{children:["This dialog opens when you click the green ",(0,i.jsx)(n.strong,{children:"ECU icon"})," on a composition node mapped to an ECU. It\nhas two tabs."]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Tab"}),(0,i.jsx)(n.th,{children:"Contents"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"ECU"})}),(0,i.jsx)(n.td,{children:"Shows the ECU information read from IVC as read-only \u2014 the CONNECTORS, CONTROLLERS, SERVICE INSTANCES, and APPLICATION ENDPOINTS tables"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"TASK"})}),(0,i.jsx)(n.td,{children:"Edits OS tasks and Runnable mappings"})]})]})]}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.strong,{children:"OS TASKS"})," list on the left of the ",(0,i.jsx)(n.strong,{children:"TASK"})," tab has the ",(0,i.jsx)(n.code,{children:"+"})," (Add Task), ",(0,i.jsx)(n.code,{children:"\u2212"})," (Delete Task), and\n",(0,i.jsx)(n.code,{children:"\u26A1"})," (Auto-Generate) buttons. ",(0,i.jsx)(n.code,{children:"+"})," creates a task named ",(0,i.jsx)(n.code,{children:"OsTask_<number>"})," with priority 1, schedule\n",(0,i.jsx)(n.code,{children:"FULL"}),", and activation 1. ",(0,i.jsx)(n.code,{children:"No tasks defined"})," appears when there is no task, and\n",(0,i.jsx)(n.code,{children:"Select a task from the list"})," when none is selected."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"\u26A1"})," (Auto-Generate) groups TimingEvents by cycle time, creates one task (",(0,i.jsx)(n.code,{children:"OsTask_<cycle>ms"}),") and\none alarm (",(0,i.jsx)(n.code,{children:"OsAlarm_<cycle>ms"}),") per cycle time, and assigns the matching events to that task. If no\ncounter exists, it creates ",(0,i.jsx)(n.code,{children:"OsCounter"})," as well. ",(0,i.jsx)(n.strong,{children:"Take care here: it replaces the existing task and\nalarm lists wholesale."})," Events other than TimingEvents are left unassigned."]}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.strong,{children:"TASK CONFIGURATION"})," panel in the middle is split into two parts."]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Part"}),(0,i.jsx)(n.th,{children:"Contents"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:["The ",(0,i.jsx)(n.strong,{children:"OS TASK"})," section"]}),(0,i.jsxs)(n.td,{children:["The task name, ",(0,i.jsx)(n.strong,{children:"Task Schedule"})," (",(0,i.jsx)(n.strong,{children:"FULL"})," / ",(0,i.jsx)(n.strong,{children:"NON"}),"), ",(0,i.jsx)(n.strong,{children:"Task Priority"}),", the activation count, the ",(0,i.jsx)(n.strong,{children:"Autostart"})," switch with the ",(0,i.jsx)(n.strong,{children:"Os App Mode"})," reference beside it, and ",(0,i.jsx)(n.strong,{children:"OS EVENT"})," (an event reference plus the hexadecimal ",(0,i.jsx)(n.strong,{children:"EVENT MASK"})," field)"]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:["The ",(0,i.jsx)(n.strong,{children:"OS ALARM"})," accordion"]}),(0,i.jsxs)(n.td,{children:["The ",(0,i.jsx)(n.code,{children:"+"})," in the header links an alarm or creates a new one, and ",(0,i.jsx)(n.code,{children:"\xd7"}
1)," breaks the link. Expanding it shows the alarm name, ",(0,i.jsx)(n.strong,{children:"OS COUNTER"}),", and ",(0,i.jsx)(n.strong,{children:"AUTOSTART"})," (Autostart Type: ",(0,i.jsx)(n.strong,{children:"ABSOLUTE"})," / ",(0,i.jsx)(n.strong,{children:"RELATIVE"}),")"]})]})]})]}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.strong,{children:"RTE EVENT TO TASK MAPPING"})," panel on the right assigns RTE events to the task. When no event\nis mapped, ",(0,i.jsx)(n.code,{children:"No events mapped to this task"})," appears; when every event is mapped,\n",(0,i.jsx)(n.code,{children:"All events are mapped"})," appears. If this composition has no Atomic SWC instance,\n",(0,i.jsx)(n.code,{children:"No Atomic SWC instances found in this ECU composition."})," appears."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"You can drag an already mapped row to change its order."})," Grab a row and drag it up or down: an\ninsertion line appears, and releasing the row moves it there. This order is the ",(0,i.jsx)(n.strong,{children:"execution order\nwithin the task"}),", and the rows are renumbered from 0 at the top and recorded in the model. A single\nundo reverts the reordering. Rows for events that are not mapped yet cannot be dragged."]}),"\n",(0,i.jsxs)(n.p,{children:["The contents of the TASK tab are synchronized both ways with the ",(0,i.jsx)(n.code,{children:"Os"})," and ",(0,i.jsx)(n.code,{children:"Rte"})," module\nconfigurations. Tasks you create here therefore also appear in ",(0,i.jsx)(n.a,{href:"/docs/paio/editors/ecuc",children:"12. ECUC"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"813-saving-undo-and-external-changes",children:"8.13 Saving, Undo, and External Changes"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Saving with ",(0,i.jsx)(n.code,{children:"Ctrl+S"})," writes the files of 8.1 in one go and deletes the SWC definition and\nMachine configuration files that a rename made obsolete."]}),"\n",(0,i.jsxs)(n.li,{children:["Undo and redo use one timeline shared by every editor of a project. Changes to the\n",(0,i.jsx)(n.strong,{children:"position \xb7 size \xb7 port positions \xb7 boundary ports"})," of a VFB node and to connection routes are\nundoable as well. Only panning and zooming are excluded from undo, because they are view state."]}),"\n",(0,i.jsxs)(n.li,{children:["If the VFB file on disk changes externally while you have pending edits, PAIO ",(0,i.jsx)(n.strong,{children:"does not reload\nit"})," and keeps your edits. A warning toast then appears:\n",(0,i.jsx)(n.code,{children:"VFB files changed on disk. Keeping your unsaved edits - save to overwrite the external change."}),"\nSaving overwrites the external change with your edits. The same rule applies when a detail dialog\nis open and holds unsaved edits."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"814-integration-with-other-editors",children:"8.14 Integration with Other Editors"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["The mapping between a composition and an ECU/HPC is synchronized in real time with the IVC editor\nand the System editor. ",(0,i.jsx)(n.strong,{children:"Create ECU & Map"})," / ",(0,i.jsx)(n.strong,{children:"Create HPC & Map"})," create the node in IVC directly."]}),"\n",(0,i.jsxs)(n.li,{children:["The interface you assign to a port refers to the definition in\n",(0,i.jsx)(n.a,{href:"/docs/paio/editors/interface-editor",children:"09. Interface Editor"}),". When you rename an interface, an open VFB updates\nimmediately, and closed SWC definition files are updated by reference rewriting."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"DERIVE SR/CS INTERFACE"})," on a port creates the SR/CS interfaces and the InterfaceMapping in one\nstep. The change spans the Interface model and the VFB model and is recorded as a single undo\nunit."]}),"\n",(0,i.jsxs)(n.li,{children:["An InterfaceMapping is stored in the VFB model, so the ",(0,i.jsx)(n.strong,{children:"Mapping"})," tab of the Interface editor\nedits the same data. A change on either side is reflected on the other\n(see ",(0,i.jsx)(n.a,{href:"/docs/paio/editors/interface-editor",children:"09. Interface Editor"}),", 9.3.7)."]}),"\n",(0,i.jsx)(n.li,{children:"Renaming an SWC also updates the prototype references of the composition, the connector\nreferences, and the SYSTEM mappings, and the file name changes with it on save."}),"\n",(0,i.jsxs)(n.li,{children:["ARXML import and export are described
1in\n",(0,i.jsx)(n.a,{href:"/docs/paio/workflow/import-export",children:"13. Import and Export"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["The full shortcut list is in ",(0,i.jsx)(n.a,{href:"/docs/paio/reference/shortcuts",children:"19. Keyboard Shortcuts"}),"."]}),"\n"]})]})}function a(e={}){let{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},2269(e,n,s){s.d(n,{A:()=>t});let t=s.p+"assets/images/vfb-01-root-overview-b2da7f9359f9541d9bd6379fc835a050.png"},305(e,n,s){s.d(n,{A:()=>t});let t=s.p+"assets/images/vfb-02-composition-contents-d51b353beb3a63558dabb00d2984e6ec.png"},9702(e,n,s){s.d(n,{A:()=>t});let t=s.p+"assets/images/vfb-03-swc-selected-properties-aa8b26a15f86a8c7415bc9c64ecd715c.png"},5051(e,n,s){s.d(n,{A:()=>t});let t=s.p+"assets/images/vfb-04-port-selected-properties-2981cf15e0b3556178e7178c22f14a3b.png"},2332(e,n,s){s.d(n,{A:()=>t});let t=s.p+"assets/images/vfb-05-swc-internal-behavior-dialog-f7b4a598658ac59916363cf0006bbe16.png"},8647(e,n,s){s.d(n,{A:()=>t});let t=s.p+"assets/images/vfb-06-machine-configuration-dialog-6a8997b0a738bd0ea106fd5bb7b3345e.png"},7276(e,n,s){s.d(n,{A:()=>t});let t=s.p+"assets/images/vfb-07-adaptive-application-nodes-4b3dcc8e649bdf7110205698adbac78d.png"},1788(e,n,s){s.d(n,{A:()=>t});let t=s.p+"assets/images/vfb-08-aa-internal-behavior-dialog-4049ee7d75678389c45569373e0fa971.png"},8453(e,n,s){s.d(n,{R:()=>d,x:()=>o});var t=s(6540);let i={},r=t.createContext(i);function d(e){let n=t.useContext(r);return t.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:d(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.