# Linux Simple I/O Library **libsimpleio** is an attempt to encapsulate (as much as possible) the ugliness of Linux I/O device access. It provides services for the following types of I/O devices: - [Industrial I/O Subsystem](https://wiki.analog.com/software/linux/docs/iio/iio) A/D (Analog to Digital) Converter Devices - [Industrial I/O Subsystem](https://wiki.analog.com/software/linux/docs/iio/iio) D/A (Digital to Analog) Converter Devices - GPIO (General Purpose Input/Output) Pins - Raw HID (Human Interface Device) Devices - I2C (Inter-Integrated Circuit) Bus Devices - [Labview LINX Remote I/O](https://www.labviewmakerhub.com/doku.php?id=learn:libraries:linx:spec:start) Devices - PWM (Pulse Width Modulated) Output Devices - [Remote I/O Protocol](http://git.munts.com/libsimpleio/doc/RemoteIOProtocol.pdf) Devices - Serial Ports - SPI (Serial Peripheral Interface) Bus Devices - [Stream Framing Protocol](http://git.munts.com/libsimpleio/doc/StreamFramingProtocol.pdf) Devices - TCP and UDP over IPv4 Network Devices - Watchdog Timer Devices Although **libsimpleio** was originally intended for Linux microcomputers such as the Raspberry Pi, it can also be useful on larger desktop Linux systems. The C wrapper functions exported by **libsimpleio** all follow the same uniform pattern: - All C wrapper functions are proper procedures (**`void f()`** in C). - All input arguments of primitive types (**`int`**, **`float`**, etc.) are passed by value. - All output arguments of primitive types are passed by reference (**`int *`**, **`float *`**, etc.). - All composite types are passed by reference. - **`int32_t`** is used wherever possible for **`int`** and **`bool`** arguments. All of the C wrapper functions are declared between **`_BEGIN_STD_C`** and **`_END_STD_C`** for C++. Additional source code libraries are provided for Ada, C++, C\#, Free Pascal, Modula-2, and Python that define OOP (Object Oriented Programming) thick binding classes for **libsimpleio**. ## Documentation The user manual for **libsimpleio** is available at [UserManual.pdf](http://git.munts.com/libsimpleio/doc/UserManual.pdf). Installation instructions are on pages 6 and 7. The man pages specifying the **libsimpleio** API are available at [libsimpleio.html](http://git.munts.com/libsimpleio/doc/libsimpleio.html). ## Git Repository The **libsimpleio** source code tree is available at: Use the following command to clone it: **`git clone https://github.com/pmunts/libsimpleio.git`** ## Debian Package Repository Prebuilt **`libsimpleio`** packages for [Debian](http://www.debian.org) Linux are available at: ## [Alire](https://alire.ada.dev) Crates | | | | --------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- | | [![](https://img.shields.io/endpoint?url=https://alire.ada.dev/badges/libsimpleio.json)](https://alire.ada.dev/crates/libsimpleio.html) | [libsimpleio.pdf](http://repo.munts.com/alire/libsimpleio.pdf) | | [![](https://img.shields.io/endpoint?url=https://alire.ada.dev/badges/mcp2221.json)](https://alire.ada.dev/crates/mcp2221.html) | [mcp2221.pdf](http://repo.munts.com/alire/mcp2221.pdf) | | [![](https://img.shields.io/endpoint?url=https://alire.ada.dev/badges/remoteio.json)](https://alire.ada.dev/crates/remoteio.html) | [remoteio.pdf](http://repo.munts.com/alire/remoteio.pdf) | ## [Make With Ada](https://www.makewithada.org/) Projects 2017 [Ada Embedded Linux Framework](https://www.makewithada.org/entry/ada_linux_sensor_framework) 2019 [Modbus RTU Framework for Ada](https://www.hackster.io/philip-munts/modbus-rtu-framework-for-ada-f33cc6) (Prize Winner\!) ## [NuGet](https://nuget.org/) Packages for [.Net](https://dotnet.microsoft.com) [libremoteio](https://www.nuget.org/packages/libremoteio) [libremoteio-templates](https://www.nuget.org/packages/libremoteio-templates) [libsimpleio](https://www.nuget.org/packages/libsimpleio) [libsimpleio-templates](https://www.nuget.org/packages/libsimpleio-templates) ----- Questions or comments to Philip Munts