# CPSW

## Copyright Notice
This file is part of CPSW. It is subject to the license terms in the LICENSE.txt file found in the top-level directory of this distribution and [here](https://confluence.slac.stanford.edu/display/ppareg/LICENSE.html).

No part of CPSW, including this file, may be copied, modified, propagated, or distributed except according to the terms contained in the LICENSE.txt file.

## Introduction

The “Common Platform Software” is a package which facilitates communication with common platform firmware. It is intended to provide basic access to firmware features while hiding details of the communication protocols involved. CPSW implements abstractions for entities like registers and devices and hides low-level details such as addressing or routing information, byte-order etc.

CPSW uses a description of a device hierarchy – which often is generated by the hardware engineer – in YAML format. This description encodes all the low-level information and is interpreted by CPSW. CPSW generates an internal representation of the hierarchy and offers the user access via the CPSW User API.

In this API the hierarchy is represented as a hierarchy of nodes (“Entries”) and the hierarchy is navigated by means of “Path” objects. All Entries have names and can be located by name lookup. Hierarchies are built out of container- elements – so called Hubs – and leaf nodes.

Some of the Entries implement interfaces. These interfaces offer additional functionality such as reading or writing values, executing commands or reading bulk data.

Because of the limited support for reflection in C++ the user normally must either know what kind of interface an Entry supports (hardware documentation) or inquire by trying to open the desired interface on an Entry.

It is important to note that CPSW is essentially state-less. This is intentional because complex systems are usually built on top of CPSW and software like EPICS already offer powerful tools for building and managing stateful systems.

## Documentation

- [How to install](INSTALL.md)
- [Describing CPSW Hierarchies with YAML](README.yamlDefinition.md)
- [CPSW "Configuration" Data](README.configData.md)

## Tutorial

A CPSW tutorial can be found [here](https://github.com/slaclab/CpswTutorial)
Icon  Name                                                                         Last modified      Size  Description
[PARENTDIR] Parent Directory - [TXT] INSTALL.html 2021-02-09 15:32 16K [TXT] README.configData.html 2021-02-09 15:32 9.2K [TXT] README.html 2021-02-09 15:32 3.9K [TXT] README.yamlDefinition.html 2021-02-09 15:32 48K [   ] README.yamlDefinition.md 2021-02-09 15:32 46K