# 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