CAmkES Features
CAmkES Architecture Description Language (ADL)
Features of the CAmkES ADL are listed below. Features that are more experimental may not be compatible with the CDL-refinement CAmkES tooling. The Status field for each feature aims to indicate any known compatibility issues related to a feature.
Features | Description | Status |
---|---|---|
Assembly |
An assembly is a top level component system description. It contains a complete description of a full system. |
Supported |
Composition |
A container for the component and connector instantiations that form a system. |
Supported |
Configuration |
A container for describing settings. This is a syntactic element to hold the assignment of attributes for a given system.It is expressed inside an assembly block. |
Supported |
Component definition |
A |
Supported |
Hierarchical components |
A component can contain its own composition and configuration sections that can define components and connections that are in a different namespace from the toplevel composition and configuration namespaces. Each component instance is still a separate component. The top level component type can then select internal interfaces to export as its own interfaces. |
Mostly supported. There are some known template bugs where a component exporting dataport interfaces is also required to have a connection to the dataport. |
Component Groups |
A |
Mostly supported. Connector implementations need to be aware that they are being used in a group component context. There are also issues with variable storage as some global variables will be defined for each component instance in the group, and threads that call across component boundaries may access incorrect variable instances. |
Hardware components |
A hardware component represents an interface to hardware in the form of a component. Declaring a component with the hardware keyword creates a hardware component. |
Supported |
Component Interfaces |
An abstract exposed interaction point of a component. The subcategories of interface are procedure, event and dataport. |
Supported |
Exported Interfaces |
An interface of a compound component that is not implemented by that component, but is an alias for internal instance’s interface. |
Supported |
Optional Interfaces |
Interfaces of components can be made optional using the |
Supported |
Procedure IDL |
An interface with function call semantics use procedures which consist of a series of methods that can be invoked independently. Procedures are defined within the ADL which has a IDL subset for defining methods and parameters. |
Supported |
Attributes |
An attribute is a configuration option that can be set on a component, connection or procedure definition. It is used to pass configuration information through to the underlying implementations. |
Supported |
Structured attributes |
Attribute types support struct- and array-like declarations that support bundling and variable length attribute definitions. |
Supported |
Default attribute values |
Attribute definitions can also provide default settings. These defaults are used in the absence attribute settings. |
Supported for component and connection attributes |
Synchronization Primitives |
CAmkES provides three primitives for intra-component mutual exclusion and synchronization. Mutexes, semaphores, and binary semaphores are declared similarly to attributes of a component definition. |
Supported |
`include` statements |
|
Supported, but only used with C header files. |
Connector definitions |
A type of link between instances. A connector implements the transportation for the interfaces it is connected between. |
Supported. |
Connections |
An instantiation of a connector. Connections connect two or more instances together via their interfaces. |
Supported. |
Imports |
|
Supported. It is possible to provide an import path argument to the camkes tool for where to search for files to import. |
C-Preprocessed ADL files |
The C Preprocessor is run over the ADL files before the parser starts parsing them. |
Supported. Because of the C-Preprocessor, the ADL ignores lines starting with #. This is not a valid comment syntax. |
Query syntax and plugins |
The parser supports adding plugins that can provide configuration values via a setting querying syntax. A plugin is able to respond to a query with a valid configuration value. |
Supported. Currently only 1 plugin exists, fdtQueryEngine, for querying values out of a Flattened device tree (FDT). |
An assembly is a top level component system description. It contains a complete description of a full system.
A container for the component and connector instantiations that form a system.
A container for describing settings. This is a syntactic element to hold the assignment of attributes for a given system.It is expressed inside an assembly block.
A type
of functional entity. ‘Component’ is used colloquially to refer to both types and instances, but in a formal sense ‘component’ refers only to the type.
A component can contain its own composition and configuration sections that can define components and connections that are in a different namespace from the toplevel composition and configuration namespaces. Each component instance is still a separate component. The top level component type can then select internal interfaces to export as its own interfaces.
A Group
combines components into a single underlying process so they share an address space. This can reduce communication costs due to reduced context switching requirements, but components in a group are required to mutually trust each other.
A hardware component represents an interface to hardware in the form of a component. Declaring a component with the hardware keyword creates a hardware component.
An abstract exposed interaction point of a component. The subcategories of interface are procedure, event and dataport.
An interface of a compound component that is not implemented by that component, but is an alias for internal instance’s interface.
Interfaces of components can be made optional using the maybe
keyword. Optional interfaces do not need to be connected to any other interfaces.
An interface with function call semantics use procedures which consist of a series of methods that can be invoked independently. Procedures are defined within the ADL which has a IDL subset for defining methods and parameters.
An attribute is a configuration option that can be set on a component, connection or procedure definition. It is used to pass configuration information through to the underlying implementations.
Attribute types support struct- and array-like declarations that support bundling and variable length attribute definitions.
Attribute definitions can also provide default settings. These defaults are used in the absence attribute settings.
CAmkES provides three primitives for intra-component mutual exclusion and synchronization. Mutexes, semaphores, and binary semaphores are declared similarly to attributes of a component definition.
include
statements are used to declare source language include dependencies on component and procedure definitions. These are used when CAmkES is using types defined by another language.
A type of link between instances. A connector implements the transportation for the interfaces it is connected between.
An instantiation of a connector. Connections connect two or more instances together via their interfaces.
import
statements are used to define an assembly over multiple .camkes
files and combine them together into a single AST.
The C Preprocessor is run over the ADL files before the parser starts parsing them.
The parser supports adding plugins that can provide configuration values via a setting querying syntax. A plugin is able to respond to a query with a valid configuration value.
See also the list of CAmkES components.