diff --git a/.render/_config.yml b/.render/_config.yml index 6b057b1..3d0fcf0 100644 --- a/.render/_config.yml +++ b/.render/_config.yml @@ -5,10 +5,10 @@ plugins: spec_server: specs.amwa.tv # AMWA ID -amwa_id: IS-DEVICE-CONFIGURATION +amwa_id: IS-14 # Base name for site (typically lower case version of AMWA ID, or the repo name) -baseurl: /is-device-configuration +baseurl: /is-14 # 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 diff --git a/APIs/schemas/invoke-method.json b/APIs/schemas/invoke-method.json new file mode 100644 index 0000000..5d07368 --- /dev/null +++ b/APIs/schemas/invoke-method.json @@ -0,0 +1,35 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object", + "description": "PATCH request body for invoking a method", + "title": "Invoke method body", + "required": [ + "methodId" + ], + "properties": { + "methodId": { + "type": "object", + "description": "ID structure for the target method", + "required": [ + "level", + "index" + ], + "properties": { + "level": { + "type": "integer", + "description": "Level component of the method ID", + "minimum": 1 + }, + "index": { + "type": "integer", + "description": "Index component of the method ID", + "minimum": 1 + } + } + }, + "arguments": { + "type": "object", + "description": "Method arguments. Arguments are specified as nested properties inside this object and their types are dictated by the specific MS-05-02 model for the method targeted. Arguments only need to be included for methods which have arguments and MUST be omitted if the method does not require any arguments." + } + } +} \ No newline at end of file diff --git a/APIs/schemas/modify-property.json b/APIs/schemas/modify-property.json new file mode 100644 index 0000000..aaa7221 --- /dev/null +++ b/APIs/schemas/modify-property.json @@ -0,0 +1,37 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object", + "description": "PUT request body for modyfing a property", + "title": "Modify property body", + "required": [ + "value" + ], + "properties": { + "value": { + "description": "New property value. The actual type is determined by the property's MS-05-02 datatype.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "integer" + }, + { + "type": "object" + }, + { + "type": "array" + }, + { + "type": "boolean" + }, + { + "type": "null" + } + ] + } + } +} \ No newline at end of file diff --git a/README.md b/README.md index 7ab742f..eac786b 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # \[Work In Progress\] AMWA NMOS Device Configuration Specification -[![Lint Status](https://github.com/AMWA-TV/is-device-configuration/workflows/Lint/badge.svg)](https://github.com/AMWA-TV/is-device-configuration/actions?query=workflow%3ALint) -[![Render Status](https://github.com/AMWA-TV/is-device-configuration/workflows/Render/badge.svg)](https://github.com/AMWA-TV/is-device-configuration/actions?query=workflow%3ARender) +[![Lint Status](https://github.com/AMWA-TV/is-14/workflows/Lint/badge.svg)](https://github.com/AMWA-TV/is-14/actions?query=workflow%3ALint) +[![Render Status](https://github.com/AMWA-TV/is-14/workflows/Render/badge.svg)](https://github.com/AMWA-TV/is-14/actions?query=workflow%3ARender) This repository holds the source for this Specification, part of the family of [Networked Media Open Specifications](https://specs.amwa.tv/nmos) from the [Advanced Media Workflow Association](https://amwa.tv) @@ -9,15 +9,15 @@ This repository holds the source for this Specification, part of the family of [ ### What does it do? -- x +Describes the specification for the NMOS Configuration API. ### Why does it matter? -- x +Sets out the rules and requirements for implementing the NMOS Device Configuration API in devices and controllers. ### How does it work? -- x +Describes a standard way of exposing [MS-05-02](https://specs.amwa.tv/ms-05-02/) models when using an HTTP API. diff --git a/docs/API requests.md b/docs/API requests.md new file mode 100644 index 0000000..0208ed6 --- /dev/null +++ b/docs/API requests.md @@ -0,0 +1,194 @@ +# API requests + +All request results MUST return a response which inherits from the base [NcMethodResult](https://specs.amwa.tv/ms-05-02/latest/docs/Framework.html#ncmethodresult) that contains a status of type [NcMethodStatus](https://specs.amwa.tv/ms-05-02/latest/docs/Framework.html#ncmethodstatus). If the method call encountered an error then the response result returned MUST inherit from [NcMethodResultError](https://specs.amwa.tv/ms-05-02/latest/docs/Framework.html#ncmethodresulterror) and include an errorMessage of type [NcString](https://specs.amwa.tv/ms-05-02/latest/docs/Framework.html#primitives). + +## Control session + +Concurrency control is left to specific device implementations, however devices MUST always return relevant error response messages and statuses when there are conflicts, errors or other noteworthy states (see [Error response messages](#error-response-messages)). + +## URL and query parameters usage + +The URL provided in the [IS-04 device](IS-04%20interactions.md) is used as the base URL for all subsequent requests. + +The device model of the device can be navigated by appending [NcObject roles](https://specs.amwa.tv/ms-05-02/latest/docs/NcObject.html) on top of the base URL starting from the `root block` and using `/` as the delimiter. + +It is RECOMMENDED for Device model objects roles to use `Unreserved Characters` as described in [RFC 3986 - 2.3. Unreserved Characters](https://www.ietf.org/rfc/rfc3986.txt). When `Reserved Characters` are used in an object role, they MUST be URL encoded when included in a URL. + +Device model object roles are case sensitive and thus any URLs which include them are also case sensitive as described in [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-2.7.3). + +This means for a given base URL the `root` block can be targeted by using `{baseUrl}/root` as the URL. + +Query parameters MUST be used to target properties or methods for a particular object located by URL. + +This means using the base URL the [userLabel](https://specs.amwa.tv/ms-05-02/latest/docs/Framework.html#ncobject) of the `root` block can be targeted by using `{baseUrl}/root?level=1&index=6` as the URL. + +All HTTP requests map to invoking methods on the resources located by the URL. + +The following subsections define use cases for the applicable HTTP verbs where resources are located using a URL format where the following are defined: + +- baseUrl - href advertised in the controls of the [IS-04 device](IS-04%20interactions.md) +- rolePath - string obtained by appending [NcObject roles](https://specs.amwa.tv/ms-05-02/latest/docs/NcObject.html) on top of the base URL starting from the `root block` and using `/` as the delimiter +- propertyLevel - number representing the inheritance level of the class containing the property (see [Control Classes](https://specs.amwa.tv/ms-05-02/latest/docs/Framework.html#control-classes)) +- propertyIndex - number representing the index level of the property within the specified inheritance level (see [Control Classes](https://specs.amwa.tv/ms-05-02/latest/docs/Framework.html#control-classes)) + +| Verb | Scenario | URL format | Condition | Body | Response | +| ----- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------------ | ------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| GET | [Get a property](#getting-a-property) | {baseUrl}/{rolePath}?level={propertyLevel}&index={propertyIndex} | The URL and query parameters target a specific object and property | N/A | [NcMethodResultPropertyValue](https://specs.amwa.tv/ms-05-02/latest/docs/Framework.html#ncmethodresultpropertyvalue) with the contents of the property | +| GET | [Get block members](#getting-the-members-of-a-block) | {baseUrl}/{rolePath} | The URL targets a specific block | N/A | [NcMethodResultPropertyValue](https://specs.amwa.tv/ms-05-02/latest/docs/Framework.html#ncmethodresultpropertyvalue) with the contents of the `members` property | +| GET | [Get class descriptor](#getting-the-class-descriptor-of-an-object) | {baseUrl}/{rolePath}?describe=true | The URL targets a specific object | N/A | [NcMethodResultClassDescriptor](https://specs.amwa.tv/ms-05-02/latest/docs/Framework.html#ncmethodresultclassdescriptor) | +| GET | [Get datatype descriptor](#getting-the-datatype-descriptor-of-a-property) | {baseUrl}/{rolePath}?level={propertyLevel}&index={propertyIndex}&describe=true | The URL and query parameters target a specific object and property | N/A | [NcMethodResultDatatypeDescriptor](https://specs.amwa.tv/ms-05-02/latest/docs/Framework.html#ncmethodresultdatatypedescriptor) | +| PUT | [Modify a property](#put) | {baseUrl}/{rolePath}?level={propertyLevel}&index={propertyIndex} | The URL and query parameters target a specific object and property | [modify-property schema](https://specs.amwa.tv/is-device-configuration/branches/publish-CR/APIs/schemas/modify-property.html) | [NcMethodResult](https://specs.amwa.tv/ms-05-02/latest/docs/Framework.html#ncmethodresult) | +| PATCH | [Invoke a method](#patch) | {baseUrl}/{rolePath} | The URL targets a specific object | [invoke-method schema](https://specs.amwa.tv/is-device-configuration/branches/publish-CR/APIs/schemas/invoke-method.html) | [NcMethodResult](https://specs.amwa.tv/ms-05-02/latest/docs/Framework.html#ncmethodresult) | + +## GET + +### Getting a property + +| ![Getting a property](images/getting-a-property.png) | +|:--:| +| _**Getting a property**_ | + +The URL MUST target a specific property of an object by locating the object using its role path and adding `level` and `index` query parameters. The response MUST be of type [NcMethodResultPropertyValue](https://specs.amwa.tv/ms-05-02/latest/docs/Framework.html#ncmethodresultpropertyvalue) with the contents of that property. + +This is equivalent to invoking the generic [Get method](https://specs.amwa.tv/ms-05-02/latest/docs/NcObject.html#generic-getter-and-setter) on the specific object for the required property. + +The following table explains the HTTP status and NcMethodStatus codes and the relevant scenarios. + +| Scenario | HTTP status code | NcMethodStatus code | +| ---------------------------------------------------------------------------------------------------------------- | ---------------- | ------------------- | +| Request is successful | 200 | 200 | +| Object cannot be found using the offered baseUrl and rolePath | 404 | 404 | +| Object is located successfully via rolePath but the desired property located via query parameters does not exist | 404 | 502 | +| The property and object are located successfully but the value cannot be retrieved for any reason | 500 | 500 | + +### Getting the members of a block + +| ![Getting block members](images/getting-block-members.png) | +|:--:| +| _**Getting block members**_ | + +The URL MUST target a specific block object in the device model and MUST NOT contain any query parameters. Devices MUST treat this as a request to retrieve the [members](https://specs.amwa.tv/ms-05-02/latest/docs/Blocks.html#device-model-discovery) property of that block. The response MUST be of type [NcMethodResultPropertyValue](https://specs.amwa.tv/ms-05-02/latest/docs/Framework.html#ncmethodresultpropertyvalue) with the contents of the `members` property. The response MUST be the same to the one received when appending the `level` and `index` query parameters and targeting the `members` property as described in [Getting a property](#getting-a-property). + +This is equivalent to invoking the generic [Get method](https://specs.amwa.tv/ms-05-02/latest/docs/NcObject.html#generic-getter-and-setter) on the specific object for the `members` property. + +The following table explains the HTTP status and NcMethodStatus codes and the relevant scenarios. + +| Scenario | HTTP status code | NcMethodStatus code | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------- | ------------------- | +| Request is successful | 200 | 200 | +| Object cannot be found using the offered baseUrl and rolePath | 404 | 404 | +| Object is located successfully via rolePath but the desired property located via query parameters does not exist for example because the object is not a block | 404 | 502 | +| The property and object are located successfully but the value cannot be retrieved for any reason | 500 | 500 | + +### Getting the class descriptor of an object + +| ![Getting class descriptor](images/getting-class-descriptor.png) | +|:--:| +| _**Getting class descriptor**_ | + +The URL MUST target a specific object in the device model and include the `describe=true` query parameter. Devices treat this as a request to retrieve the [class descriptor](https://specs.amwa.tv/ms-05-02/latest/docs/Framework.html#ncclassdescriptor) of that object's class and MUST return a response of type [NcMethodResultClassDescriptor](https://specs.amwa.tv/ms-05-02/latest/docs/Framework.html#ncmethodresultclassdescriptor) with a descriptor which includes all inherited elements. + +This is equivalent to invoking the [GetControlClass method](https://specs.amwa.tv/ms-05-02/latest/docs/Framework.html#ncclassmanager) on the [Class Manager object](https://specs.amwa.tv/ms-05-02/latest/docs/Managers.html#class-manager) and including all inherited elements. + +The following table explains the HTTP status and NcMethodStatus codes and the relevant scenarios. + +| Scenario | HTTP status code | NcMethodStatus code | +| ------------------------------------------------------------------------------------- | ---------------- | ------------------- | +| Request is successful | 200 | 200 | +| Object cannot be found using the offered baseUrl and rolePath | 404 | 404 | +| Object is located successfully via rolePath but class descriptor cannot be retrieved | 500 | 500 | + +### Getting the datatype descriptor of a property + +| ![Getting datatype descriptor](images/getting-datatype-descriptor.png) | +|:--:| +| _**Getting datatype descriptor**_ | + +The URL MUST target a specific property of an object by locating the object using its role path and adding `level`, `index` and `describe=true` query parameters. Devices treat this as a request to retrieve the [datatype descriptor](https://specs.amwa.tv/ms-05-02/latest/docs/Framework.html#ncdatatypedescriptor) of that property and MUST return a response of type [NcMethodResultDatatypeDescriptor](https://specs.amwa.tv/ms-05-02/latest/docs/Framework.html#ncmethodresultdatatypedescriptor) with a descriptor which includes all inherited elements. + +This is equivalent to invoking the [GetDatatype method](https://specs.amwa.tv/ms-05-02/latest/docs/Framework.html#ncclassmanager) on the [Class Manager object](https://specs.amwa.tv/ms-05-02/latest/docs/Managers.html#class-manager) and including all inherited elements. + +The following table explains the HTTP status and NcMethodStatus codes and the relevant scenarios. + +| Scenario | HTTP status code | NcMethodStatus code | +| ---------------------------------------------------------------------------------------------------------------- | ---------------- | ------------------- | +| Request is successful | 200 | 200 | +| Object cannot be found using the offered baseUrl and rolePath | 404 | 404 | +| Object is located successfully via rolePath but the desired property located via query parameters does not exist | 404 | 502 | +| The property and object are located successfully but datatype descriptor cannot be retrieved for any reason | 500 | 500 | + +## PUT + +| ![Putting a property](images/putting-a-property.png) | +|:--:| +| _**Putting a property**_ | + +The PUT verb MUST only be used for setting individual object properties. + +The URL MUST target a specific property of an object by locating the object using its role path and adding `level` and `index` query parameters. The response MUST be of type [NcMethodResult](https://specs.amwa.tv/ms-05-02/latest/docs/Framework.html#ncmethodresult). + +The body of the request MUST include an object which includes the new value of the property as per the [modify-property](https://specs.amwa.tv/is-device-configuration/branches/publish-CR/APIs/schemas/modify-property.html) schema. + +This is equivalent to invoking the generic [Set method](https://specs.amwa.tv/ms-05-02/latest/docs/NcObject.html#generic-getter-and-setter) on the specific object for the required property. + +The following table explains the HTTP status and NcMethodStatus codes and the relevant scenarios. + +| Scenario | HTTP status code | NcMethodStatus code | +| ---------------------------------------------------------------------------------------------------------------- | ---------------- | ------------------- | +| Request is successful | 200 | 200 | +| Object cannot be found using the offered baseUrl and rolePath | 404 | 404 | +| Object is located successfully via rolePath but the desired property located via query parameters does not exist | 404 | 502 | +| The property and object are located successfully but the value cannot be set because it is readonly | 500 | 405 | +| The property and object are located successfully but the value cannot be set because it is not valid | 500 | 417 | +| The property and object are located successfully but the value cannot be set for any other reason | 500 | 500 | + +`TODO`: Figure out how we map deprecation statuses for properties and methods. + +`TBD`: Do we say for any other error status codes just use 500 as the HTTP status code? + +## PATCH + +| ![Invoking a method](images/invoking-a-method.png) | +|:--:| +| _**Invoking a method**_ | + +The PATCH verb MUST only be used for invoking object methods. + +The URL MUST target a specific object by locating the object using its role path. +The body of the request MUST include an object which includes a [methodId](https://specs.amwa.tv/ms-05-02/latest/docs/Framework.html#ncmethodid) with `level` and `index` followed by any arguments required by the method. + +```json +{ + "methodId": { + "level": ..., + "index": ... + }, + "arguments": { + ... + } +} +``` + +For a full schema of the required body object see the [invoke-method](https://specs.amwa.tv/is-device-configuration/branches/publish-CR/APIs/schemas/invoke-method.html) schema. + +The response MUST be of type [NcMethodResult](https://specs.amwa.tv/ms-05-02/latest/docs/Framework.html#ncmethodresult) or a derived type. + +This is equivalent to invoking the specified method. + +The following table explains the HTTP status and NcMethodStatus codes and the relevant scenarios. + +| Scenario | HTTP status code | NcMethodStatus code | +| ------------------------------------------------------------------------------------------------------------------- | ---------------- | ------------------- | +| Request is successful | 200 | 200 | +| Object cannot be found using the offered baseUrl and rolePath | 404 | 404 | +| Object is located successfully via rolePath but the desired method does not exist | 404 | 501 | +| The method and object are located successfully but the method cannot be invoked because the arguments are not valid | 500 | 417 | +| The method and object are located successfully but the method cannot be invoked because of any other reason | 500 | 500 | + +`TODO`: Figure out how we map deprecation statuses for properties and methods. + +## Error response messages + +When any request encounters an error, the response MUST be [NcMethodResultError](https://specs.amwa.tv/ms-05-02/latest/docs/Framework.html#ncmethodresulterror) or a derived datatype. + +`TODO`: Capture possible HTTP status codes and NcMethodStatus values for general error responses. diff --git a/docs/Data type marshalling.md b/docs/Data type marshalling.md new file mode 100644 index 0000000..dcd95dc --- /dev/null +++ b/docs/Data type marshalling.md @@ -0,0 +1,20 @@ +# Data type marshalling + +| Type | JSON representation | +| ---------------------------- | ---------------------------------------- | +| enums | Integer associated enum value | +| NcString | string | +| NcBoolean | boolean | +| NcInt16 | number | +| NcInt32 | number | +| NcInt64 | number | +| NcUint16 | number (must be unsigned) | +| NcUint32 | number (must be unsigned) | +| NcUint64 | number (must be unsigned) | +| NcFloat32 | number (must be floating point) | +| NcFloat64 | number (must be floating point) | +| struct types | object | +| sequences of primitive types | array of primitive types | +| sequences of struct types | array of objects | + +For specific datatype definitions consult the [NMOS Control Framework](https://specs.amwa.tv/ms-05-02/latest/docs/Framework.html#datatypes). diff --git a/docs/Getting block members.md b/docs/Getting block members.md new file mode 100644 index 0000000..97caa32 --- /dev/null +++ b/docs/Getting block members.md @@ -0,0 +1,2 @@ +# Getting block members + diff --git a/docs/IS-04 interactions.md b/docs/IS-04 interactions.md new file mode 100644 index 0000000..2ea18c9 --- /dev/null +++ b/docs/IS-04 interactions.md @@ -0,0 +1,40 @@ +# IS-04 interactions + +The API availability MUST be advertised through existing IS-04 practices inside the controls array of an NMOS Device. Devices MUST include the `urn:x-nmos:control:configuration` control type. + +```json +{ + ... + "senders": [ + "a65c15a4-a52e-4960-8cd2-e05c31196e5f", + "68f519a3-5523-4b2c-b72d-ec23cc80207d" + ], + "receivers": [ + "8a7bb1c1-4a82-4fd9-a4fb-96f68f560831", + "ab450c07-ce54-44da-9ea9-c3e62e7b06d0" + ], + "controls": [ + { + "type": "urn:x-nmos:control:configuration/v1.0", + "href": "http://192.168.10.3/x-nmos/configuration/v1.0/" + } + ], + "tags": {}, + "type": "urn:x-nmos:device:generic", + "label": "NMOS Device", + "version": "1529676926:000000000", + "node_id": "d1713110-7343-4d9e-b3f4-456c8f6ce765", + "id": "58f6b536-ca4c-43fd-880a-9df2501fc125", + "description": "NMOS Device" + ... +} +``` + +A given instance of the Configuration API MAY offer control of multiple Devices in a Node from a single URI. Alternatively there MAY be multiple instances of the API on one Node, for example, each corresponding to one Device. +In either case, the ‘control’ endpoint for each Device’s Configuration API instance MUST be advertised, even if the URI is the same. + +This flexibility is to accommodate different relationships between Devices and Nodes. For example, some Devices may be loosely coupled to the Node, for example cards in a card frame. +These Devices are more likely to have an instance of the API for each card. +Others may be tightly coupled, for example a media processing pipeline on a server, where it is likely to be preferable to have one instance of the API that is advertised for each pipeline. + +`TODO`: decide on `href` format and trailing slashes diff --git a/docs/Overview.md b/docs/Overview.md index c3820d9..72aedcd 100644 --- a/docs/Overview.md +++ b/docs/Overview.md @@ -1,4 +1,4 @@ -# AMWA NMOS Device Configuration Specification: Overview +# AMWA IS-14 NMOS Device Configuration Specification: Overview {:.no_toc} * A markdown unordered list which will be replaced with the ToC, excluding the "Contents header" from above @@ -10,12 +10,14 @@ _(c) AMWA 2023, CC Attribution-NoDerivatives 4.0 International (CC BY-ND 4.0)_ ## Introduction -> Provide an overview of the Specification. +This document aims to give a general description of the NMOS Device Configuration API. This API defines how NMOS Control models (described in the NMOS Control Framework) can be exposed and consumed in a standardized way when using HTTP. -Familiarity with the [JT-NM Reference Architecture](https://jt-nm.org/reference-architecture/) is assumed. +This document relies on previous familiarity with the following existing documents: -See also the [NMOS Technical Overview](https://specs.amwa.tv/nmos/main/docs/Technical_Overview.html). +* [AMWA MS-05-01 NMOS Control Architecture](https://specs.amwa.tv/ms-05-01) +* [AMWA MS-05-02 NMOS Control Framework](https://specs.amwa.tv/ms-05-02) +This API does not support subscriptions and notifications. For subscriptions and notifications support see [AMWA IS-12](https://specs.amwa.tv/is-12/). ## Use of Normative Language @@ -24,9 +26,7 @@ and "OPTIONAL" in this document are to be interpreted as described in [RFC 2119] ## Definitions -The NMOS terms 'Node', ... are used as defined in the [NMOS Glossary](https://specs.amwa.tv/nmos/main/docs/Glossary.html). - -> List as appropriate +The NMOS term 'Device' is used as defined in the [NMOS Glossary](https://specs.amwa.tv/nmos/main/docs/Glossary.html). This specification also defines the following terms. diff --git a/docs/README.md b/docs/README.md index a3e4603..7b65248 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,3 +1,15 @@ ### Introduction - [Overview](Overview.md) + +### Specification + +- [Transport and message encoding](Transport%20and%20message%20encoding.md) +- [Security and authorization](Security%20and%20authorization.md) +- [API requests](API%20requests.md) +- [Data type marshalling](Data%20type%20marshalling.md) +- [IS-04 interactions](IS-04%20interactions.md) + +### Examples + +- [Getting block members](Getting%20block%20members.md) diff --git a/docs/Security and authorization.md b/docs/Security and authorization.md new file mode 100644 index 0000000..f4c8304 --- /dev/null +++ b/docs/Security and authorization.md @@ -0,0 +1,10 @@ +# Security and authorization + +Authorization and transport security features described in the BCP-03-XX suite and in IS-10 are used to secure and authorize this protocol. + +The relevant documents can be found here: + +- [AMWA BCP-003-01 Secure Communication in NMOS Systems](https://specs.amwa.tv/bcp-003-01) +- [AMWA BCP-003-02 Authorization in NMOS Systems](https://specs.amwa.tv/bcp-003-02) +- [AMWA BCP-003-03 Certificate Provisioning in NMOS Systems](https://specs.amwa.tv/bcp-003-03) +- [AMWA IS-10 NMOS Authorization Specification](https://specs.amwa.tv/is-10) diff --git a/docs/Transport and message encoding.md b/docs/Transport and message encoding.md new file mode 100644 index 0000000..16c3c20 --- /dev/null +++ b/docs/Transport and message encoding.md @@ -0,0 +1,5 @@ +# Transport and message encoding + +Implementations MUST use `HTTP` as the communication transport. + +Implementations MUST use `JSON` as the message encoding data format. diff --git a/docs/images/getting-a-property.png b/docs/images/getting-a-property.png new file mode 100644 index 0000000..e9f6053 Binary files /dev/null and b/docs/images/getting-a-property.png differ diff --git a/docs/images/getting-block-members.png b/docs/images/getting-block-members.png new file mode 100644 index 0000000..ea9b054 Binary files /dev/null and b/docs/images/getting-block-members.png differ diff --git a/docs/images/getting-class-descriptor.png b/docs/images/getting-class-descriptor.png new file mode 100644 index 0000000..508c323 Binary files /dev/null and b/docs/images/getting-class-descriptor.png differ diff --git a/docs/images/getting-datatype-descriptor.png b/docs/images/getting-datatype-descriptor.png new file mode 100644 index 0000000..e076095 Binary files /dev/null and b/docs/images/getting-datatype-descriptor.png differ diff --git a/docs/images/invoking-a-method.png b/docs/images/invoking-a-method.png new file mode 100644 index 0000000..882ee69 Binary files /dev/null and b/docs/images/invoking-a-method.png differ diff --git a/docs/images/putting-a-property.png b/docs/images/putting-a-property.png new file mode 100644 index 0000000..bc920ec Binary files /dev/null and b/docs/images/putting-a-property.png differ diff --git a/spec.yml b/spec.yml index c636548..1f0c7fc 100644 --- a/spec.yml +++ b/spec.yml @@ -1,10 +1,10 @@ -amwa_id: IS-DEVICE-CONFIGURATION -url: https://specs.amwa.tv/is-device-configuration -name: AMWA NMOS Device Configuration Specification +amwa_id: IS-14 +url: https://specs.amwa.tv/is-14 +name: Device Configuration status: Work In Progress -repo_name: is-device-configuration +repo_name: is-14 alt_repo_name: nmos-device-configuration -repo_url: https://github.com/AMWA-TV/is-device-configuration +repo_url: https://github.com/AMWA-TV/is-14 releases: default_branch: v1.0-dev -show_in_index: false +show_in_index: true