Linux Support for ACCES I/O Products
ACCES I/O Products strives to fully support its products in Linux. We currently offer limited support for our PCI and PC/104 products and more complete support for our USB products in Linux. It is our goal to fully support the PCI and PC/104 products in Linux as well.
Our USB support in Linux consists of three principal software modules:
AIOUSB - a core C-language driver that provides basic functionality for controlling ACCES' USB devices. The Linux implementation of this library is a superset of the similar library for Windows, so people who are familiar with the Windows version will quickly understand the Linux version. The Linux version of this library utilizes libusb to communicate with the devices on the USB bus. The Linux version of this library is written in standard C and works with both 32- and 64-bit Linux, as well as with C and C++.
C++ class library - for customers who prefer working with object-oriented software, we offer a C++ class library that resides above AIOUSB. Like AIOUSB, the C++ class library can be compiled in both 32- and 64-bit Linux environments and provides the following benefits compared to using the lower level AIOUSB library:
A fully object-oriented class library. One need never use any of the lower level AIOUSB library functions, although they can be used if desired.
A slightly more intuitive and more consistent API. For example, functions that can be performed on individual objects, such as A/D channels, can be performed on groups of objects.
Makes use of the C++ Standard Template Library.
Compatible with object-oriented programming environments, such as Qt.
Offers an API that's nearly identical to that of our Java class library (described below), including the use of exceptions instead of result codes.
Java class library - for customers who are interested in Java support, we offer a full Java class library. This class library resides above AIOUSB and calls it through the Java Native Interface (JNI). Like AIOUSB, the Java class library works in both 32- and 64-bit JVMs for Linux and provides the following benefits compared to using the lower level AIOUSB library:
A fully object-oriented class library. One need never use any of the lower level AIOUSB library functions. In fact, it's not possible to call the AIOUSB functions directly, which has the benefit of protecting users from potentially unsafe usage.
Offers an API that's nearly identical to that of our C++ class library (described above).
Makes extensive use of exceptions to simplify the API. Unlike AIOUSB, most of the functions of which return result codes that need to be checked, the Java and C++ class libraries throw exceptions in the event that requested operations are unsuccessful. The use of exceptions permits a cleaner software design, such as the chaining together of several method calls, catching exceptions from any of the method calls in a single place.
The methods available in each product family class clearly indicate which operations are appropriate for each device.
All of the software modules described above include rich, universal HTML documentation, such as this document which describes the AIOUSB API. All of our software for Linux adheres to widely used, well documented standards in order to ensure maximum portability and reliability. We provide a growing list of sample programs which demonstrate use of the above software modules in conjunction with various USB devices. Finally, we provide full, open source code for all of these libraries and sample programs.
PCI and PC/104 Support
Our PCI and PC/104 support includes a several components:
- A kernel driver to provide register level access to any device (for those applications where the application cannot be "root").
- A kernel driver to handle IRQ requests.
- A shell script to detect ACCES branded PCI devices and their resources.
- Many products have gcc sample programs, and all PCI products ship with register-level "C" samples, for DOS, that convert to linux fairly easily.
- Full source code to every driver, sample, and utility are always provided.