Context¶
-
class
oni.Context
: public IDisposable, public IDisposable¶ Open Neuro Interface (ONI) compliant acquisition context.
Public Functions
-
Context
(string driver, int index)¶ Initializes a new instance of Context with the specified hardware translation driver and host hardware index.
- Param driver
A string specifying the device driver used by the context to control hardware. This string corresponds a compiled implementation of onidriver.h that has the name onidriver_<drv_name>.so/dll.
- Param index
An index specifying the physical location within the host that the host hardware resides. A value of -1 will use the default location.
- Throws System.InvalidProgramException
Thrown when the specified driver cannot be found or is invalid.
- Throws ONIException
Thrown when there is an error during hardware initialization (e.g. an invalid device table).
-
void
SetCustomOption
(int option, int value)¶ Set an the value of implementation-specific context option (those beyond ONI-specified options).
- Param option
Implementation-specific option to set.
- Param value
Option value
-
int
GetCustomOption
(int option)¶ Retrieve the value of an implementation-specific context option.
- Param option
Context option to retrieve.
- Throws ONIException
Thrown when option is invalid.
- Return
Value of the context option.
-
void
Start
(bool reset_frame_clock = true)¶ Start data acquisition.
- Param reset_frame_clock
If true, the acquisition clock counter is reset synchronously to the start of data acquisition in hardware (see AcquisitionClockHz). This is equivalent to calling this function and ResetFrameClock at precisely the same moment, which is impossible in software.
-
void
Stop
()¶ Stop data acquisition.
-
void
ResetFrameClock
()¶ Reset the acquisition clock counter to 0 (AcquisitionClockHz).
-
uint
ReadRegister
(uint dev_index, uint register_address)¶ Read the value of a configuration register from a specific device within the current oni.Context.DeviceTable. This can be used to verify the success of calls to Context.ReadRegister(uint, uint) or to obtain state information about devices managed by the current acquisition context. Register specifications (addresses, read- and write-access, and descriptions are provided on the ONI-device datasheet).
- Param dev_index
Fully-qualified device index within the Context.DeviceTable
- Param register_address
Address of register to be read.
- Throws ONIException
Thrown if the device and/or register address in invalid or if register is write only.
- Return
Value of the register.
-
void
WriteRegister
(uint dev_index, uint register_address, uint value)¶ Change the value of a configuration register from specific devices within the current Context.DeviceTable. Register specifications (addresses, read- and write-access, acceptable values, and descriptions are provided on the ONI device datasheet).
- Param dev_index
Fully-qualified device index within the Context.DeviceTable
- Param register_address
Address of register to write to.
- Param value
Value to write to the register.
- Throws ONIException
Thrown if the device and/or register address in invalid or if register is read only.
-
Frame
ReadFrame
()¶ Read a device data frame from the high-bandwidth data input channel. This call will block until either enough data available on the stream to construct an underlying block buffer (see Context.BlockReadSize). This function is zero-copy.
- Throws ONIException
Thrown if there is an error reading a frame.
- Return
A device data frame.
-
void
Write
<T> (uint dev_index, T value)¶ Write a single value to a particular device within the Context.DeviceTable using the high-bandwidth output channel.
- Tparam T
Type of the value to be written. Must be an unmanaged type.
- Param dev_index
Fully-qualified device index within the oni.Context.DeviceTable
- Param value
Value to write to the device.
- Throws ONIException
Throw if data is an invalid size or the selected device does not accept write data.
-
void
Write
<T> (uint dev_index, T[] data) Write an array to a particular device within the Context.DeviceTable using the high-bandwidth output channel.
- Tparam T
Type of the value to be written. Must be an unmanaged type.
- Param dev_index
Fully-qualified device index within the Context.DeviceTable
- Param data
Data array to write to the device.
- Throws ONIException
Throw if data array is an invalid size or the selected device does not accept write data.
-
void
Write
(uint dev_index, IntPtr data, int data_size) Write data at an IntPtr to a particular device within the Context.DeviceTable using the high-bandwidth output channel.
- Param dev_index
Fully-qualified device index within the Context.DeviceTable
- Param data
Pointer to data to write to the device.
- Param data_size
Size of data pointed to by data in bytes.
- Throws ONIException
Throw if data_size is an invalid size or the selected device does not accept write data.
-
Hub
GetHub
(uint device_address)¶ Retrieve the hub that a given Device resides in.
- Param device_address
The fully specified Device.Address to retrieve the hub for.
- Return
A Hubcontaining hub metadata.
Public Members
-
readonlyuint
SystemClockHz
¶ Host system clock frequency in Hz. This describes the frequency of the clock governing the host hardware.
-
readonlyuint
AcquisitionClockHz
¶ Host system acquisition clock frequency in Hz, derived from SystemClockHz. This describes the frequency of the clock used to drive the acquisition counter which is used timestamp data frames.
-
readonlyuint
MaxReadFrameSize
¶ The maximal size of a frame produced by a call to ReadFrame in bytes. This number is the maximum sized frame that can be produced across every device within the device table that generates read data.
-
readonlyuint
MaxWriteFrameSize
¶ The maximal size of consumed by a call to Write in bytes. This number is the maximum sized frame that can be consumed across every device within the device table that accepts write data.
-
readonlyDictionary<uint, Device>
DeviceTable
¶ ONI specified device table containing the full device hierarchy governed by this acquisition context. This IDictionary maps a fully-qualified Device.Address to a Device instance.
Properties
-
bool
Running
{ get; set; }¶ Indicates whether or not data acquisition is running.
-
int
HardwareAddress
{ get; set; }¶ The address of the host hardware within the acquisition computer. Determines the synchronization role of the hardware in multi-host systems.
-
int
BlockReadSize
{ get; set; }¶ Number of bytes read during each driver access to the high-bandwidth read channel using Context.ReadFrame. This option allows control over a fundamental trade-off between closed-loop response time and overall bandwidth. The minimum (default) value will provide the lowest response latency. Larger values will reduce syscall frequency and may improve processing performance for high-bandwidth data sources. This minimum size of this option is determined by Context.MaxReadFrameSize.
-
int
BlockWriteSize
{ get; set; }¶ Number of bytes pre-allocated for calls to Write<T>(uint, T), Write<T>(uint, T[]), and Write(uint, IntPtr, int). A larger size will reduce the average amount of dynamic memory allocation system calls but increase the cost of each of those calls. The minimum size of this option is determined by Context.MaxWriteFrameSize.
-