/ONI

Open Neural Interface: formal specifications for high-bandwidth, bidirectional communication with neural probes

Primary LanguageMakefile

Open Neuro Interface Specification [WIP]

When developing neural acquisition tools, we have found that proper headstage serialization and host to PC communication are some of the trickiest parts of the development process. Therefore developers often resort to brittle solutions that meet their needs but are hard to inter-operate (e.g. NI DAQs). Alternatively, they may turn to ready-made options with poor performance (e.g. multiple Arduinos or Opal Kelly development boards). Therefore, these interfaces become the limiting hardware for both terms of integration (e.g. using disparate hardware in the same rig) as well as closed-loop performance (e.g. loop delay).

To address this, we have created the Open Neuro Interface (ONI) which is a set of general purpose communication protocols, device driver specifications, and programming interfaces to support arbitrary mixtures of hardware. These designs are formally described by the ONI Specificaiton, which was developed with lots of community input.

The hope is that this acquisition system will get the boring part out of the way: it serves as a high performance, open-source platform upon which cool neuroscience tools can by built. We also hope that the use of a common protocols will allow easy integration of disparate hardware to develop rich feedback control loops for neuroscience projects. If you are interested in developing against this specification (e.g. for your miniscope, headstage, position tracker, 2P microscope, etc), we would love to hear from you and talk about the best way to proceed. If you prefer a private conversation, please contact us via Open Ephys.

Contents

The ONI Specificaiton formally defines the requirements of the following components:

  1. Headstage to host serialization protocol specification [WIP]
  2. Host to PC communication protocol specification
  3. Host device driver specification [WIP]
  4. Host programming interface specification

Each can be found as a separate section in the specification itself.

Contributing

oni-spec-wip.txt is the unstable work in progress for the next ONI revision. Please make changes and PRs to this document only. This repo shall not contain a PDF version of this WIP spec.

Implementations

Open Ephys 2.0

In addition to these specifications, we have created the following flagship implementations which form the basis of our next generation acquisition system. These implementations are modular -- you can use them for your project. There is no need to reinvent the wheel:

  • Firmware implementations based on (1,2).

    • TODO
  • Device driver implementation based on (3)

    • TODO
  • API implementations based upon (4):

    • liboni is an ANSI-C open-ephys++ API implementation. It contains functions for configuring and stream data to and from hardware.
    • cpponi C++14 bindings for liboepcie.
    • clroni CLR/.NET bindings for liboepcie.

If you think these implementations are missing something, feel free to use the spec to develop for yourself or submit a bug report. When you use these implementations or your own ONI-compatible hardware, firmware, or API, your project will be automatically compatible with Open Ephys tools!

Feedback

We know we did not do a perfect job with this specification. Please tell us why! -- it will help this project be generally useful for the neuroscience research.

License

MIT