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
-------------------------------------
[![libsimpleio](https://img.shields.io/endpoint?url=https://alire.ada.dev/badges/libsimpleio.json)](https://alire.ada.dev/crates/libsimpleio.html)
[![mcp2221](https://img.shields.io/endpoint?url=https://alire.ada.dev/badges/mcp2221.json)](https://alire.ada.dev/crates/mcp2221.html)
[![remoteio](https://img.shields.io/endpoint?url=https://alire.ada.dev/badges/remoteio.json)](https://alire.ada.dev/crates/remoteio.html)
The Munts Technologies Alire crate index fork is available at:
Use the following command to reference it:
**`alr index --add git+https://github.com/pmunts/alire-index.git --name pmunts --before community`**
[NuGet](https://nuget.org/) Packages for [.Net](https://dotnet.microsoft.com)
-----------------------------------------------------------------------------
[![libremoteio](https://img.shields.io/nuget/v/libremoteio?style=flat&logo=nuget&label=libremoteio)](https://www.nuget.org/packages/libremoteio)
[![libremoteio-templates](https://img.shields.io/nuget/v/libremoteio-templates?style=flat&logo=nuget&label=libremoteio-templates)](https://www.nuget.org/packages/libremoteio-templates)
[![libsimpleio](https://img.shields.io/nuget/v/libsimpleio?style=flat&logo=nuget&label=libsimpleio)](https://www.nuget.org/packages/libsimpleio)
[![libsimpleio-templates](https://img.shields.io/nuget/v/libsimpleio-templates?style=flat&logo=nuget&label=libsimpleio-templates)](https://www.nuget.org/packages/libsimpleio-templates)
Use one of the following command sequences to create a .Net program
project:
dotnet new install libremoteio-templates
dotnet new csharp_console_libremoteio -o myprogram
Or
dotnet new install libsimpleio-templates
dotnet new csharp_console_libsimpleio -o myprogram
------------------------------------------------------------------------
Questions or comments to Philip Munts