This repository contains a C# implementation of AES70-2018. It makes heavy use of the Task Parallel
Library and async
/await
. It requires the .NET framework version 4.5 or higher.
AES70 (aka OCA) is a control protocol developed by the OCA Alliance. Fundamentally, OCA is a RPC protocol with event subscription capabilities. An OCA device consists of a set of pre-defined manager objects and an object tree representing device-specific functionality.
All objects inside of the device must implement a class defined inside of the standard. Proprietary sub-classes are allowed. Each class defines a set of methods, properties and events.
This library contains controller-side implementation of all classes defined in the current version of the standard.
This library contains different APIs for accessing and manipulating remote OCA objects. This library
is built upon the Task Parallel Library. All methods which require communication with the remote
device will return a Task
instance.
When first connecting to an unknown OCA device, the object tree needs to be discovered. To do that
this library offers the DeusO.AES70.Controller.ObjectTree
class which can be used to iterate
over all object inside of a device. The complete object tree of a device can be fetched by calling
GetAllObjects()
inside of DeusO.AES70.Controller.Device
. Each node in the object tree will then
contain a remote OCA object represented using the basic [Control Classes](#Control Classes).
The most basic API allows calling remote methods and subscribing to OCA events.
In this API each class defined in the OCA standard has one corresponding class in the
DeusO.AES70.Controller
namespace. Objects of these classes are returned by the discovery
methods in DeusO.AES70.Controller.Device
. Methods and events defined by the OCA standard are
represented by methods and events in these classes.
Accessing and modifying properties can be done using the corresponding getter and setter methods.
This abstraction is built upon the basic [Control Classes](#Control Classes) and represents all OCA
properties of a remote object as properties. The properties object of a remote object can be retrieved
by calling the FetchProperties()
method on a control class. The FetchProperties()
method in
DeusO.AES70.Controller.ObjectTree
will cache properties objects. Each class defined in the OCA standard
has a corresponding properties class, e.g. the OCA class OcaGain
is represented by the properties
class DeusO.AES70.Controller.OcaGainProperties
.
Once a properties object is returned by either of these two methods, all properties will contain their
corresponding remote values.
Setting a property in a properties object will attempt to set the value of that property remotely.
In addition to that the properties classes implement the System.ComponentMode.INotifyPropertyChanged
interface, which allows them to be used in UI applications. In addition to that, each property has
a corresponding changed event. For instance, the Gain
property inside of the OcaGain
class
has a changed event handler called GainChanged
. These event handlers will trigger when a new value
of the property is received from the device.
The library contains documentation comments which are compatible with Visual Studio.
There are simple usage examples which can be found in examples/
. They cover
basic use-cases of this library.
This repository contains both a visual studio solution for building the library itself, all tests and example programs.
This software is released unter the terms of the MIT license. For further details inspect the LICENSE file.
Copyright (C) 2018 - 2025 Arne Goedeke
Copyright (C) 2018 - 2025 DeusO GmbH