OcaMatrix#
This document describes the device side implementation of OcaMatrix. This class is documented in the AES70 standard as:
Rectangular array of identical objects (Matrix Members, or just Members in context) that is coordinate addressable and has sets of common input and output ports. An OcaMatrix instance is a container for a two-dimensional collection of members.
Matrix members may be workers (including blocks or other matrices), or agents. All members of a given matrix shall be of the same class (the member class).
No object shall belong to more than one matrix at a time. No object shall appear more than once in a given matrix.
The OcaMatrix object shall not instantiate the Members, but instead shall provide the coordinate addressing, implement the common input and output ports, and provide certain other aggregate functions. The term Matrix means an OcaMatrix object plus the ancillary objects that collectively provide matrixing functionality.
Specifically, a Matrix shall consists of:
- One instance of the OcaMatrix class (the matrix object); and
- (N x M) members, where each member shall be an instance of the member class; and
The normative specification of the OcaMatrix class is here. The normative specification of the overall Matrix mechanism, with informative examples, is in [AES70-1(Matrices)].
Overview#
- ClassID: 1.1.5
- Header:
aes70/device/OcaMatrix.hpp
- Namespace:
aes70::device
- Inheritance: aes70::device::OcaWorker, aes70::device::OcaRoot, aes70::device::object
Class Declaration#
The device side implementation has the following signature.
namespace aes70::device
{
template <class Implementation>
class OcaMatrix : public OcaWorker<Implementation>
{
};
}
The template argument Implementation
may implement the following methods.
Note
The signatures given here are just one possibility and that most methods are optional. Implement only those methods which make sense in the context of your device. See the documentation in Implementing AES70 Classes for more details.
class MyOcaMatrixImplementation
{
// Methods defined by OcaMatrix
std::tuple<OcaMatrixCoordinate,OcaMatrixCoordinate> GetCurrentXY();
void SetCurrentXY(OcaMatrixCoordinate x, OcaMatrixCoordinate y);
std::tuple<OcaMatrixCoordinate,OcaMatrixCoordinate,OcaMatrixCoordinate,OcaMatrixCoordinate,OcaMatrixCoordinate,OcaMatrixCoordinate> GetSize();
void SetSize(OcaMatrixCoordinate xSize, OcaMatrixCoordinate ySize);
OcaList2D<OcaONo> GetMembers();
void SetMembers(OcaList2D<OcaONo> members);
OcaONo GetMember(OcaMatrixCoordinate x, OcaMatrixCoordinate y);
void SetMember(OcaMatrixCoordinate x, OcaMatrixCoordinate y, OcaONo memberONo);
OcaONo GetProxy();
void SetProxy(OcaONo ONo);
OcaUint8 GetPortsPerRow();
void SetPortsPerRow(OcaUint8 Ports);
OcaUint8 GetPortsPerColumn();
void SetPortsPerColumn(OcaUint8 Ports);
void SetCurrentXYLock(OcaMatrixCoordinate x, OcaMatrixCoordinate y);
void UnlockCurrent();
OcaList<OcaCommandResult> ExecuteMethod(OcaList32<OcaMatrixCoordinates> TargetMembers, OcaMethodID TargetMethod, OcaList<OcaLongBlob> InData);
OcaList32<OcaCommandResult> ExecuteCommands(OcaList32<OcaMatrixCommand> Commands);
// Methods defined by OcaWorker
OcaBoolean GetEnabled();
void SetEnabled(OcaBoolean enabled);
OcaPortID AddPort(OcaString Name, OcaIODirection Mode);
void DeletePort(OcaPortID ID);
OcaList<OcaPort> GetPorts();
OcaString GetPortName(OcaPortID PortID);
void SetPortName(OcaPortID ID, OcaString Name);
OcaString GetLabel();
void SetLabel(OcaString label);
OcaONo GetOwner();
OcaTimeInterval GetLatency();
void SetLatency(OcaTimeInterval latency);
std::tuple<OcaRolePath,OcaONoPath> GetPath();
OcaMap<OcaPortID, OcaPortClockMapEntry> GetPortClockMap();
void SetPortClockMap(OcaMap<OcaPortID, OcaPortClockMapEntry> Map);
OcaPortClockMapEntry GetPortClockMapEntry(OcaPortID ID);
void SetPortClockMapEntry(OcaPortID PortID, OcaPortClockMapEntry Entry);
void DeletePortClockMapEntry(OcaPortID ID);
// Methods defined by OcaRoot
OcaBoolean GetLockable();
void SetLockNoReadWrite();
void Unlock();
OcaString GetRole();
void SetLockNoWrite();
OcaLockState GetLockState();
};