Skip to content

DeutscheSoft/libaes70.NET

Repository files navigation

AES70.NET

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.

Introduction

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.

Controller APIs

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.

Object Discovery

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).

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.

Control Class Properties

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.

Documentation

The library contains documentation comments which are compatible with Visual Studio.

Examples

There are simple usage examples which can be found in examples/. They cover basic use-cases of this library.

Building

This repository contains both a visual studio solution for building the library itself, all tests and example programs.

License

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

About

A aes70 controller implementation for C#

Topics

Resources

License

Stars

Watchers

Forks

Languages