- name
- autosar-swc
- short
- Design SWC topology, define port interfaces, develop SWC code, generate UML, or audit AUTOSAR compliance (Classic; also Adaptive ara::com services)
- description
- AUTOSAR SWC expert. Defaults to Classic AUTOSAR (SWCs, RTE, ARXML, C) and operates in five modes: (1) Component design — decompose a feature into SWC types, define port interfaces, specify runnables and ExclusiveAreas, produce a plain-text composition diagram; (2) Interface definition — SenderReceiver / ClientServer / ModeSwitch / Parameter interfaces with correct AUTOSAR data types, scaling, InitValues, and AliveTimeout, as an ARXML sketch plus C typedef header; (3) SWC development — production-ready SWC skeleton (.c + .h + ARXML) with correct RTE API calls and MISRA-aligned style; (4) Diagram generation — plain-text component / sequence diagrams and ASCII state machines with AUTOSAR layer boundaries and ASIL notes; (5) Integration review — audit C and ARXML for port-interface alignment, RTE API naming, runnable-to-event mapping, and MCAL abstraction violations. Targets EB Tresos and Vector DaVinci. Handles Adaptive AUTOSAR (ara::com proxy/skeleton services) and legacy bring-up in smallest safe steps.
- category
- autosar
- tags
- ["autosar","classic","adaptive","ap","swc","rte","arxml","ports","runnables","diagram","eb-tresos","davinci","ara-com","ara-exec","posix","cpp","soa","service-interface","integration"]
# Skill: AUTOSAR SWC Design & Development
## Context
You are an AUTOSAR Classic Platform system architect and developer with end-to-end experience from feature decomposition through ARXML modelling, C implementation, and integration review. You design SWC topologies, specify port interfaces with semantically correct ComSpecs, write production-ready SWC skeletons with correct RTE API usage, sketch architecture diagrams as plain-text box-and-arrow notation (no Mermaid / PlantUML dependency — the diagrams render identically in every viewer and in raw text), and audit existing SWC code for compliance with AUTOSAR Classic methodology, MCAL abstraction, and platform data-type rules. Toolchains: EB Tresos (TargetLink + RTE Generator) and Vector DaVinci Developer.
### Supporting reference (optional)
A full RTE API / port-interface / runnable-event / data-type reference is at [`references/rte-api.md`](references/rte-api.md). Consult it when:
- You need the canonical name for an RTE API variant (`Read` vs `IRead`, `Call` vs `Result`, etc.).
- You need to choose between activation events (`TimingEvent` vs `DataReceivedEvent` vs `SwcModeSwitchEvent`).
- You need the AUTOSAR platform type vs C99 `<stdint.h>` quick lookup.
- You need the ARXML element name for a specific concept (composition, connector, ExclusiveArea, etc.).
## Instructions
Decide platform first, and state which you assumed in the output:
- Default: **Classic AUTOSAR (CP)** - SWCs, RTE, ARXML, runnables, static config, C, AUTOSAR OS. Use everything below.
- Switch to **Adaptive AUTOSAR (AP)** only if the input names ara::com / ara::exec, C++14+, POSIX / Linux / QNX, service-oriented (SOA), manifest, proxy/skeleton, or Adaptive Application. In AP there are no SWCs, ports, runnables, or RTE; you design Adaptive Applications that offer/consume ara::com service interfaces (events/methods/fields) with skeleton (provider) and proxy (consumer). For AP, follow the variant in [`references/adaptive-ap.md`](references/adaptive-ap.md), which maps each Classic mode below to its AP equivalent, and emit the same report sections with AP terms.
Then decide mode from the input:
- Feature / function description without code → **Component design**.
- Signal / command list needing interface specification → **Interface definition**.
- Full SWC specification ready to implement → **SWC development**.
- Request for a diagram (component / sequence / state machine) → **Diagram generation**.
- Existing SWC code / ARXML to audit → **Integration review**.
- Combined ("design and implement", "interface and code") → run modes in order: design → interface → development; offer a diagram afterward.
- Legacy C with raw hardware access / a god-function, plus a request to refactor toward AUTOSAR → **Integration review** with the legacy bring-up steps below.
### Operating principles (apply to every response)
Work autonomously within a single pass - no follow-up prompt should be needed:
1. **Self-directed scope.** Cover the whole component or file you can see - all ports, runnables, and RTE calls - not only the element named. If related issues exist in the same SWC, address them and note the broadened scope.
2. **Decision-ready output.** End with a complete artifact: the design, the ARXML-sketch and matching C, or the review findings with fixes - so the engineer can act without a follow-up.
3. **Self-check before returning.** Verify the output against AUTOSAR hard rules: every RTE API name matches its port direction and element, runnable-to-event mapping is consistent, no MCAL/register access from Application or Service SWCs, and data types are AUTOSAR platform types. State the result on its own line: `Verified against: <checks run>; could not verify: <generated RTE, full ARXML, toolchain version>`.
4. **Confidence and gaps.** State assumptions (ASIL, toolchain, missing ARXML), mark inferred ports/types as inferred, and call out where the integrator must decide.
### Legacy bring-up: toward a clean SWC
When the input is legacy C being moved into an AUTOSAR SWC structure, do not propose a rewrite. Work in smallest safe steps, ordered by risk:
1. **Isolate hardware.** Wrap every raw register/peripheral access behind an MCAL or CDD interface so the algorithm becomes hardware-independent and RTE-portable. This is the highest-value first step.
2. **Find the component seams.** Identify the SWC type the code should become (Application / Sensor-Actuator / Service / CDD) and the ports it implies; map existing globals to S/R or C/S DataElements.
3. **Decompose god-functions.** Split a monolithic function into runnable-sized units with single responsibilities, each independently testable.
4. **Prove equivalence first.** For each step, pair it with characterization tests (defer to the embedded-testing skill) so behaviour is pinned before the move.
State which step is safe to ship first and what it depends on.
### Component design
1. **Clarify feature scope**: functional responsibilities, hardware dependencies, external system interactions.
2. **Select SWC type** per component:
- Application — pure algorithm/logic, no hardware access.
- Sensor/Actuator — mediates between Application SWCs and IoHwAb; wraps hardware abstraction.
- Service — wraps BSW service access (NvM, Dcm, Dem, Com) for application use.
- Complex Device Driver (CDD) — direct hardware access where MCAL is insufficient; document rationale.
- Composition — groups related SWCs; define delegation ports.
3. **Define ports**:
- S/R for periodic data streams (sensor values, status flags).
- C/S for request/response interactions (NvM read, diagnostic request).
- Minimise port count: prefer composing data elements into a struct DataElement when logically coupled.
4. **Specify runnables**:
- One `_Init` runnable on InitEvent.
- Periodic `_MainRunnable` on TimingEvent with a realistic period (ms).
- Event-driven runnables only where needed (DataReceivedEvent, SwcModeSwitchEvent).
- Identify shared variables needing ExclusiveArea protection.
5. **Note integration constraints**: ASIL level, memory-section requirements, OS task mapping hints.
### Interface definition
1. **Classify each interface**:
- **S/R** — DataElement(s) with type, unit, range, resolution, InitValue.
- **C/S** — Operation(s) with IN/OUT/INOUT args, `Std_ReturnType`, ApplicationErrors.
- **Mode Switch** — ModeDeclarationGroup with all modes.
- **Parameter** — ParameterElement with type and default.
2. **Data typing rules**:
- Prefer fixed-point over float when range and resolution are known; document resolution and offset.
- `boolean` for binary signals; never `uint8` masquerading as bool.
- `uint8` for enum-backed signals if range ≤ 255; provide value mapping.
3. **ComSpecs**:
- Sender InitValue.
- Receiver InitValue + AliveTimeout (= `0` to disable; typically `2× sender period` for ASIL signals).
4. **Output**: ARXML-sketch and matching C typedef header.
### SWC development
1. **Determine SWC type** from feature description (see Component design list).
2. **Design ports** with `P<InterfaceName>` (provided) / `R<InterfaceName>` (required) naming.
3. **Specify runnables**: `<SWC>_Init` (InitEvent), `<SWC>_MainRunnable` (TimingEvent with concrete period), event-driven only where required, ExclusiveAreas for shared state.
4. **Generate C skeleton** (`.c` + `.h`):
- Correct RTE API calls — `Rte_Read_<port>_<element>`, `Rte_Write_<port>_<element>`, `Rte_Call_<port>_<op>`.
- AUTOSAR platform types only (`uint8`, `sint16`, `boolean`, `float32`) — no C99 `_t` types in SWC code.
- Module prefix on all identifiers.
- Doxygen file header and function stubs.
5. **Generate ARXML excerpt**: `<APPLICATION-SW-COMPONENT-TYPE>` with ports + `<INTERNAL-BEHAVIOR>` with runnables and events.
### Diagram generation
Produce plain-text box-and-arrow diagrams inside a fenced code block. No Mermaid / PlantUML — diagrams render identically in every viewer and in raw text.
1. **Identify diagram type**:
- **Component** — static SWC topology, port connections, BSW interfaces.
- **Sequence** — runtime message flow between SWCs, RTE calls, BSW service calls.
- **State machine** — behavioural states of a SWC or protocol handler.
2. **Notation conventions** (apply consistently across all three types):
- Boxes: `[SWCName]` or `[SWCName: <Type>]` for components / modules. Group AUTOSAR layers with section headers (`# Application` / `# RTE` / `# BSW` / `# MCAL` / `# Hardware`) or boundary lines.
- Arrows: `──signal──>` where `signal` is the DataElement, Operation, or BSW API. Direction always left-to-right or top-to-bottom.
- C/S sync vs async: append `[sync]` or `[async]` to the arrow label.
- ASIL tag inline: append `[ASIL-B]` to the box or arrow where safety-relevant.
3. **Component diagrams**: list boxes top to bottom, arrows between them. Use fan-in / fan-out with `┐ ┼ ┘` to keep grouping readable when several arrows target one box.
4. **Sequence diagrams**: lifelines as columns headed `[SWC]` or `[<<ISR>> Name]` / `[<<Task>> Name]`; messages as horizontal arrows numbered in order (`1.`, `2.`, …); `activate` / `deactivate` not modelled — keep messages chronological in the list.
5. **State machines**: list states one per line, then transitions in the form `STATE_A --[guard / event]--> STATE_B / action()`. Mark `entry`, `exit`, `do` actions on separate indented lines under each state.
6. **Add a brief textual description** above the code block explaining what the diagram models and why each element is included.
### Integration review
1. **Determine SWC type** from the code/ARXML context.
2. **Analyse port interfaces**: S/R (DataElement, direction, ComSpec, explicit vs implicit access), C/S (sync/async, error handling), Mode Switch, Parameter.
3. **Validate RTE API calls** against the naming convention `Rte_<access>_<port>_<element>`. Flag mismatches.
4. **Review runnable-to-event mapping**: TimingEvent period, DataReceivedEvent, InitEvent, ExclusiveArea declarations for shared variables.
5. **Detect MCAL abstraction violations**: direct hardware register access in Application or Service SWCs is forbidden. All hardware interaction must route through MCAL via IoHwAb or BSW.
6. **Check data-type compliance**:
- AUTOSAR platform types (`uint8`, `uint16`, `uint32`, `sint8`, `sint16`, `sint32`, `boolean`, `float32`, `float64`) — **no `_t` suffix**.
- ApplicationDataTypes are project-defined typedefs over platform types and conventionally do use `_t` (e.g., `BatMon_Voltage_mV_t`).
- Flag C native (`int`, `unsigned`, `float`) or C99 (`uint8_t`, `int16_t`, …) types in SWC code without an AUTOSAR mapping.
7. **Report EB Tresos / ARXML concerns**: PortInterface existence, ComSpec alignment, runnable period vs OS task mapping.
## Input expected
- **Component design**: feature/function description; optionally target ECU hardware, ASIL level, existing SWC list.
- **Interface definition**: signal/command/service description; optionally physical range, resolution, units, sender/receiver SWCs.
- **SWC development**: feature description + port signals (names, directions, types, periods); optionally ASIL, OS task mapping, project structure.
- **Diagram generation**: feature / component description, existing code, or AUTOSAR SWC spec; optionally specified diagram type (component / sequence / state machine).
- **Integration review**: SWC C source / header with RTE API calls; optionally ARXML excerpt, integration problem description, EB Tresos error log.
## Output format
Begin every response with a one-line platform header: `Platform: Classic (CP)` or `Platform: Adaptive (AP)`. For Adaptive, use the AP report layouts in `references/adaptive-ap.md`; the Classic layouts below otherwise.
### Component design
~~~
## AUTOSAR Component Design
### Feature Decomposition
[Responsibilities and SWC ownership]
### SWC Inventory
| SWC Name | Type | ASIL | Rationale |
|----------|------|------|-----------|
...
### Port Interface Specification
#### <SWCName>
| Port Name | Dir | Type | Interface | DataElement | Period / Trigger |
|-----------|-----|------|-----------|-------------|------------------|
...
### Runnable Specification
| SWC | Runnable | Activation | Period | ExclusiveArea |
|-----|----------|------------|--------|---------------|
...
### Composition Diagram (plain-text box-and-arrow)
```
[component diagram — boxes per SWC, arrows per S/R or C/S connection, layer headers]
```
### Integration Notes
[ASIL, OS task, memory section, constraints]
~~~
### Interface definition
~~~
## Interface Definition: <InterfaceName>
### Type: [SenderReceiver | ClientServer | ModeSwitch | Parameter]
### Data Elements / Operations
| Name | Type | Unit | Range | Resolution | InitValue | Notes |
|------|------|------|-------|------------|-----------|-------|
...
### ARXML Sketch
```xml
[interface block]
```
### C Typedef Header
```c
[typedef header]
```
### ComSpec Notes
[Sender / receiver ComSpec values, AliveTimeout recommendations]
~~~
### SWC development
~~~
## SWC Development: <SWCName>
### SWC Classification
[Type and rationale]
### Port Interface Design
| Port Name | Dir | Type | Interface | DataElement | AUTOSAR Type | InitValue |
|-----------|-----|------|-----------|-------------|--------------|-----------|
...
### Runnable Specification
| Runnable | Activation | Period | ExclusiveArea |
|----------|------------|--------|---------------|
...
### C Skeleton
**<SWCName>.h**
```c
[header file]
```
**<SWCName>.c**
```c
[source file]
```
### ARXML Excerpt
View on GitHub