Skip to content

Commit

Permalink
Spec elevation
Browse files Browse the repository at this point in the history
  • Loading branch information
peterbrightwell committed Sep 12, 2023
1 parent 746dbf3 commit 0d64dce
Show file tree
Hide file tree
Showing 10 changed files with 41 additions and 41 deletions.
2 changes: 1 addition & 1 deletion .render/_config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ amwa_id: MS-05-01
baseurl: /ms-05-01

# Which release or branch appears in header links and on the home page
default_tree: branches/v1.0-dev # alternatively e.g. releases/v1.0
default_tree: branches/v1.0.x # alternatively e.g. releases/v1.0

# Regex patterns of releases and branches to show
show_releases: ^v[0-9]+\.[0-9]+$|^v[0-9]+\.[0-9]+\.[0-9]+$
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# \[Work In Progress\] AMWA MS-05-01: NMOS Control Architecture
# AMWA MS-05-01: NMOS Control Architecture

[![Lint Status](https://github.com/AMWA-TV/ms-05-01/workflows/Lint/badge.svg)](https://github.com/AMWA-TV/ms-05-01/actions?query=workflow%3ALint)
[![Render Status](https://github.com/AMWA-TV/ms-05-01/workflows/Render/badge.svg)](https://github.com/AMWA-TV/ms-05-01/actions?query=workflow%3ARender)
Expand Down
4 changes: 2 additions & 2 deletions docs/Appendix A - Class ID Format.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

## Class IDs

Each class id is identified by using the [NcClassId](https://specs.amwa.tv/ms-05-02/branches/v1.0-dev/docs/Framework.html#ncclassid) datatype.
Each class id is identified by using the [NcClassId](https://specs.amwa.tv/ms-05-02/branches/v1.0.x/docs/Framework.html#ncclassid) datatype.

The lineage key of a class is set of class indices that identifies the entire lineage of the class, beginning from [NcObject](https://specs.amwa.tv/ms-05-02/branches/v1.0-dev/docs/Framework.html#ncobject), extending down through all ancestor classes, and ending at the class in question. The key contains as many class indices as needed to describe the inheritance hierarchy.
The lineage key of a class is set of class indices that identifies the entire lineage of the class, beginning from [NcObject](https://specs.amwa.tv/ms-05-02/branches/v1.0.x/docs/Framework.html#ncobject), extending down through all ancestor classes, and ending at the class in question. The key contains as many class indices as needed to describe the inheritance hierarchy.

To support compatible addition of non-standard classes to the standard control model, lineage keys allow _**authority keys**_ to be interposed in the sequence of class indices. This feature is described in [Non-standard classIds](#non-standard-classids).

Expand Down
2 changes: 1 addition & 1 deletion docs/Components.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ NCA is based on two interrelated models:

- The [Framework](https://specs.amwa.tv/ms-05-02), which defines the NCA control and monitoring models and the common mechanisms that they use. The Framework has two components:

- **Control model:** An inheritance tree of control classes that specify NCA's control and monitoring repertoire. These classes are summarized in the [Control Model](Control%20Model.md) and defined normatively in the framework collection of [model definitions](https://specs.amwa.tv/ms-05-02/branches/v1.0-dev/docs/Framework.html).
- **Control model:** An inheritance tree of control classes that specify NCA's control and monitoring repertoire. These classes are summarized in the [Control Model](Control%20Model.md) and defined normatively in the framework collection of [model definitions](https://specs.amwa.tv/ms-05-02/branches/v1.0.x/docs/Framework.html).

- **Core Mechanisms:** Common mechanisms used by the control classes. These are defined in [Core Mechanisms](Core%20Mechanisms.md).

Expand Down
20 changes: 10 additions & 10 deletions docs/Control Model.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@

The Control Model is a singly-inherited tree of classes. Each control class defines a particular control or monitoring API that devices implement.

[Control classes](https://specs.amwa.tv/ms-05-02/branches/v1.0-dev/docs/Framework.html#control-classes) can have three kinds of elements:
[Control classes](https://specs.amwa.tv/ms-05-02/branches/v1.0.x/docs/Framework.html#control-classes) can have three kinds of elements:

- **Properties** These are control and status parameters.

- **Methods** Represent actions a Controller can perform on the object.

- **Events** These are defined conditions that arise inside objects. For example, all objects include the [PropertyChanged](https://specs.amwa.tv/ms-05-02/branches/v1.0-dev/docs/NcObject.html#propertychanged-event) event, which is raised (i.e. occurs) when the value of a property of the object has changed.
- **Events** These are defined conditions that arise inside objects. For example, all objects include the [PropertyChanged](https://specs.amwa.tv/ms-05-02/branches/v1.0.x/docs/NcObject.html#propertychanged-event) event, which is raised (i.e. occurs) when the value of a property of the object has changed.

The event and subscription mechanism is described further in [Events, Notifications and Subscriptions](Core%20Mechanisms.md#events-notifications-and-subscriptions).

Expand All @@ -18,9 +18,9 @@ Each property, method, and event of a class has a unique identifier. These ident

## Class inheritance

The control model defines a class inheritance mechanism, in which the various classes' definitions are derived from the definitions of other, more elementary classes, with everything ultimately leading up (if you think of ancestry diagrams) or down (if you think of trees) to a single fundamental base named [NcObject](https://specs.amwa.tv/ms-05-02/branches/v1.0-dev/docs/Framework.html#ncobject). Thus, a control class is the outcome of a **class inheritance hierarchy**.
The control model defines a class inheritance mechanism, in which the various classes' definitions are derived from the definitions of other, more elementary classes, with everything ultimately leading up (if you think of ancestry diagrams) or down (if you think of trees) to a single fundamental base named [NcObject](https://specs.amwa.tv/ms-05-02/branches/v1.0.x/docs/Framework.html#ncobject). Thus, a control class is the outcome of a **class inheritance hierarchy**.

When a control class inherits from another class, _all_ of its properties, methods, and events are inherited. A notable example of this mechanism is the **PropertyChanged** event. **PropertyChanged** is defined in [NcObject](https://specs.amwa.tv/ms-05-02/branches/v1.0-dev/docs/NcObject.html#propertychanged-event). All classes in the model inherit directly or indirectly from [NcObject](https://specs.amwa.tv/ms-05-02/branches/v1.0-dev/docs/Framework.html#ncobject) ; therefore, they all have **PropertyChanged** events. Consequently, a controller can subscribe to property-value changes for any object in the Device model.
When a control class inherits from another class, _all_ of its properties, methods, and events are inherited. A notable example of this mechanism is the **PropertyChanged** event. **PropertyChanged** is defined in [NcObject](https://specs.amwa.tv/ms-05-02/branches/v1.0.x/docs/NcObject.html#propertychanged-event). All classes in the model inherit directly or indirectly from [NcObject](https://specs.amwa.tv/ms-05-02/branches/v1.0.x/docs/Framework.html#ncobject) ; therefore, they all have **PropertyChanged** events. Consequently, a controller can subscribe to property-value changes for any object in the Device model.

_This document will visualize the class inheritance hierarchy as a tree in inverted form, with NcObject at the top, and successive refinements of NcObject extending downward. Our tree will be a trailing vine._

Expand All @@ -40,9 +40,9 @@ These rules are:

## Class hierarchy

For NCA to meet its interoperability objectives, a repertoire of common control class models are defined in the [NMOS Control Framework](https://specs.amwa.tv/ms-05-02). These classes are defined in the control model, via an inheritance hierarchy of control classes that descends from [NcObject](https://specs.amwa.tv/ms-05-02/branches/v1.0-dev/docs/Framework.html#ncobject).
For NCA to meet its interoperability objectives, a repertoire of common control class models are defined in the [NMOS Control Framework](https://specs.amwa.tv/ms-05-02). These classes are defined in the control model, via an inheritance hierarchy of control classes that descends from [NcObject](https://specs.amwa.tv/ms-05-02/branches/v1.0.x/docs/Framework.html#ncobject).

Control classes are specified in several categories and subcategories. Each category or subcategory has its own base class that inherits directly or indirectly from [NcObject](https://specs.amwa.tv/ms-05-02/branches/v1.0-dev/docs/Framework.html#ncobject). All the classes in a category inherit from that category's base class. Thus, each category is a subtree of the overall hierarchy.
Control classes are specified in several categories and subcategories. Each category or subcategory has its own base class that inherits directly or indirectly from [NcObject](https://specs.amwa.tv/ms-05-02/branches/v1.0.x/docs/Framework.html#ncobject). All the classes in a category inherit from that category's base class. Thus, each category is a subtree of the overall hierarchy.

Figure **NCA Control Model** illustrates the NCA class tree, and shows the categories.

Expand All @@ -54,11 +54,11 @@ Figure **NCA Control Model** illustrates the NCA class tree, and shows the categ

The categories shown in figure **NCA Control Model** are as follows:

- The **Blocks** subtree contains the definition of [NcBlock](https://specs.amwa.tv/ms-05-02/branches/v1.0-dev/docs/Framework.html#ncblock) - see [Blocks](https://specs.amwa.tv/ms-05-02/branches/v1.0-dev/docs/Blocks.html).
- The **Blocks** subtree contains the definition of [NcBlock](https://specs.amwa.tv/ms-05-02/branches/v1.0.x/docs/Framework.html#ncblock) - see [Blocks](https://specs.amwa.tv/ms-05-02/branches/v1.0.x/docs/Blocks.html).

- The [Workers](https://specs.amwa.tv/ms-05-02/branches/v1.0-dev/docs/Framework.html#workers) subtree contains definitions of classes that perform processing or monitoring functions.
- The [Managers](https://specs.amwa.tv/ms-05-02/branches/v1.0-dev/docs/Framework.html#ncmanager) subtree contains definitions of classes that perform Device housekeeping functions.
- The [Workers](https://specs.amwa.tv/ms-05-02/branches/v1.0.x/docs/Framework.html#workers) subtree contains definitions of classes that perform processing or monitoring functions.
- The [Managers](https://specs.amwa.tv/ms-05-02/branches/v1.0.x/docs/Framework.html#ncmanager) subtree contains definitions of classes that perform Device housekeeping functions.

## Datatype definitions

To support the class definitions, the control model also contains an extensive set of [datatype definitions](https://specs.amwa.tv/ms-05-02/branches/v1.0-dev/docs/Framework.html#datatypes). These definitions specify the scalar and structural datatypes used to define class properties and method parameters.
To support the class definitions, the control model also contains an extensive set of [datatype definitions](https://specs.amwa.tv/ms-05-02/branches/v1.0.x/docs/Framework.html#datatypes). These definitions specify the scalar and structural datatypes used to define class properties and method parameters.
8 changes: 4 additions & 4 deletions docs/Core Mechanisms.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,23 +46,23 @@ The parameters of notifications depend on the type of event. In general, event p

### The PropertyChanged event

The [PropertyChanged](https://specs.amwa.tv/ms-05-02/branches/v1.0-dev/docs/NcObject.html#propertychanged-event) event is defined by the base class [NcObject](https://specs.amwa.tv/ms-05-02/branches/v1.0-dev/docs/Framework.html#ncobject), so it is inherited by every object.
The [PropertyChanged](https://specs.amwa.tv/ms-05-02/branches/v1.0.x/docs/NcObject.html#propertychanged-event) event is defined by the base class [NcObject](https://specs.amwa.tv/ms-05-02/branches/v1.0.x/docs/Framework.html#ncobject), so it is inherited by every object.

[PropertyChanged](https://specs.amwa.tv/ms-05-02/branches/v1.0-dev/docs/NcObject.html#propertychanged-event) is the key mechanism for NCA's support of multiple Controllers without polling. By subscribing to changes in the properties it cares about, a Controller can stay in sync with the device, even when those properties are being changed by other controllers.
[PropertyChanged](https://specs.amwa.tv/ms-05-02/branches/v1.0.x/docs/NcObject.html#propertychanged-event) is the key mechanism for NCA's support of multiple Controllers without polling. By subscribing to changes in the properties it cares about, a Controller can stay in sync with the device, even when those properties are being changed by other controllers.

## Capability enumeration

To discover the detailed capabilities of a block, a Controller can enumerate its contained members. Furthermore, the Controller can discover details of the classes from which those objects are built and the data types used.

### Object enumeration

We refer to an object contained by a block as a _member_ of that block. [NcBlock](https://specs.amwa.tv/ms-05-02/branches/v1.0-dev/docs/Blocks.html) offers means of retrieving the descriptors of its members.
We refer to an object contained by a block as a _member_ of that block. [NcBlock](https://specs.amwa.tv/ms-05-02/branches/v1.0.x/docs/Blocks.html) offers means of retrieving the descriptors of its members.

### Class discovery

If a Controller does not have _a priori_ knowledge of a device's class definitions, it can discover the details of those definitions using the _class discovery_ mechanism. This mechanism returns descriptors to the Controller for each class and datatype the device uses. These descriptors are sufficient for the Controller to construct well-formed API calls to the device; however, they do not describe the semantics of such calls.

The class discovery mechanism is available through the [NcClassManager](https://specs.amwa.tv/ms-05-02/branches/v1.0-dev/docs/Managers.html#class-manager).
The class discovery mechanism is available through the [NcClassManager](https://specs.amwa.tv/ms-05-02/branches/v1.0.x/docs/Managers.html#class-manager).

## Reliability

Expand Down
6 changes: 3 additions & 3 deletions docs/Device Model.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
# Device model

An _**NCA Device**_ is a physical or virtual device that publishes an NCA-conformant API. This API is organized around the concept of _**Blocks**_, which are containers for objects. The control model defines a class named [NcBlock](https://specs.amwa.tv/ms-05-02/branches/v1.0-dev/docs/Framework.html#ncblock) that is instantiated to create blocks.
An _**NCA Device**_ is a physical or virtual device that publishes an NCA-conformant API. This API is organized around the concept of _**Blocks**_, which are containers for objects. The control model defines a class named [NcBlock](https://specs.amwa.tv/ms-05-02/branches/v1.0.x/docs/Framework.html#ncblock) that is instantiated to create blocks.

A block can contain other blocks. A contained block is said to be **nested** inside its containing block.

## Device structure

As illustrated in the figure `NCA Device` below, the Device model defines a Device as a [root block](https://specs.amwa.tv/ms-05-02/branches/v1.0-dev/docs/Blocks.html) accompanied by a few control objects. In simple devices, these objects might be contained directly in the root block; in more complex devices, they are contained in a hierarchy of blocks nested inside the root block.
As illustrated in the figure `NCA Device` below, the Device model defines a Device as a [root block](https://specs.amwa.tv/ms-05-02/branches/v1.0.x/docs/Blocks.html) accompanied by a few control objects. In simple devices, these objects might be contained directly in the root block; in more complex devices, they are contained in a hierarchy of blocks nested inside the root block.

An object contained in a block is called a _**member**_ of that block.

Expand All @@ -30,6 +30,6 @@ The device model is created by instantiating control model classes as shown in t
|:--:|
| _**Device model**_ |

In this case, only two control model classes are shown: [NcObject](https://specs.amwa.tv/ms-05-02/branches/v1.0-dev/docs/Framework.html#ncobject), which is the parent class of all control classes, and [NcBlock](https://specs.amwa.tv/ms-05-02/branches/v1.0-dev/docs/Framework.html#ncblock), which is the base class upon which all block classes are built.
In this case, only two control model classes are shown: [NcObject](https://specs.amwa.tv/ms-05-02/branches/v1.0.x/docs/Framework.html#ncobject), which is the parent class of all control classes, and [NcBlock](https://specs.amwa.tv/ms-05-02/branches/v1.0.x/docs/Framework.html#ncblock), which is the base class upon which all block classes are built.

On the right is an example Device model showing blocks **X** and **Y**.
Loading

0 comments on commit 0d64dce

Please sign in to comment.