.. _introduction:

============
Introduction
============

**What is Addi-Pack?**
----------------------

**Addi-Pack** is the official software suite for all **ADDI-DATA Hardware devices**.
It provides a unified environment for **hardware control**, **data acquisition**, and **application development** on both **Windows**, **Linux** and real-time system such as **RTX**.


Its main goals are to:

- Simplify the installation and configuration of ADDI-DATA devices, allowing users to deploy the system quickly and obtain their first signal within minutes.
- Support the development of multi-modal acquisition and processing applications, covering different physical signals (digital I/O, analog channels, timers, counters, watchdogs, etc.), including real-time operation on Windows, Linux and RTX systems.
- Provide a single API for all supported devices, allowing the same code to run across devices and operating systems, which simplifies development and maintenance.
- Integrate DAQ systems into industrial environments, with support for fieldbus protocols like EtherCAT, OT/IT communication interfaces such as OPC UA, and automation systems including TwinCAT


**Core Principles**
-------------------

Addi-Pack is built on three main ideas:

1. **Portability** - Run the same code on any of supported platforms.
2. **Modularity** - Drivers, APIs, and bindings are independent yet fully compatible
3. **Consistency** - Unified function model: identical names, parameters, and error codes across all devices

This ensures a predictable experience no matter which Operating System or programming language you use.


**Architecture**
----------------

Addi-Pack is organised into **four layers**, each with a specific role:

+-------------------+-----------------------------------------------+----------------------------------------------------------+
| **Layer**         | **Role**                                      | **Example Components**                                   |
+===================+===============================================+==========================================================+
| **Drivers**       | Kernel modules for hardware communication     | ``apcie1032.ko`` , ``IoctlCall``                         |
+-------------------+-----------------------------------------------+----------------------------------------------------------+
| **API Libraries** | User-space C/C++, and Python bindings         | ``AddiDataInitTimer()``, ``device.timer().init_timer()`` |
+-------------------+-----------------------------------------------+----------------------------------------------------------+
| **Tools**         | Configuration and diagnostics utilities       |  Log Viewer, Device Info CLI                             |
+-------------------+-----------------------------------------------+----------------------------------------------------------+
| **Samples**       | Practical code examples                       | ``timer.c``, ``digital_input.cpp``, ``counter.py``       |
+-------------------+-----------------------------------------------+----------------------------------------------------------+

.. tip::
   The same architecture applies to all supported cards, including **APCI-1500**, **APCIe-1032**, and **APCIe-1564**.
