> For the complete documentation index, see [llms.txt](https://ruggedboard.gitbook.io/ruggedboard/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ruggedboard.gitbook.io/ruggedboard/lib-mraa-and-upm-sensor-libraries/know-your-libraries/libmraa.md).

# LibMRAA

**libmraa - Low Level Skeleton Library for Communication on GNU/Linux platforms**\
Libmraa is a C/C++ library with bindings to Python, Javascript and Java to interface with the I/O on ruggedBoard, Galileo, Edison & other platforms, with a structured and sane API where port names/numbering matches the board that you are on. Use of libmraa does not tie you to specific hardware with board detection done at runtime you can create portable code that will work across the supported platforms.

The intent is to make it easier for developers and sensor manufacturers to map their sensors & actuators on top of supported hardware and to allow control of low level communication protocol by high level languages & constructs.

![LIBMRAA ARCHITECTURE](/files/-Ldh81JwUK0mgT1n1wcs)

These interfaces allow you to interact with all libmraa functionality. The C++ classes directly wrap the C API and provide a near 1:1 mapping of functionality.

* UART
* SPI
* I2C
* GPIO
* PWM
* LED

**LibMraa code flow:**\
Code flow starts from arm.c file. In arm.c file, it calls different boards. In arm.c file we have to register our board information, like hardware name and board name. \
Example: ruggedBOARD\_A5D2x

&#x20;<br>

<div align="center"><img src="/files/-LdhEJmr1PZ_ohoniikB" alt="Code Flow"></div>
