# Lignite: Program LEGO Mindstorms EV3 in Ruby

Lignite is a set of Ruby tools to interact with LEGO Mindstorms EV3.
It uses the original LMS2012 firmware, so ev3dev is not required.

At this point the tools are still rather a thin wrapper so it will be useful
to have the *EV3 Firmware Developer Kit* and *EV3 Communication Developer Kit*
documents at hand for reference: see the "Advanced Users – Developer Kits"
section of the
[Mindstorms Downloads](https://www.lego.com/en-us/mindstorms/downloads) page.

[![Gem Version][GV img]][Gem Version]
[![Build Status][BS img]][Build Status]
[![Code Climate][CC img]][Code Climate]
[![Coverage Status][CS img]][Coverage Status]

[Gem Version]: https://rubygems.org/gems/lignite
[Build Status]: https://travis-ci.org/mvidner/lignite
[Code Climate]: https://codeclimate.com/github/mvidner/lignite
[Coverage Status]: https://coveralls.io/r/mvidner/lignite

[GV img]: https://badge.fury.io/rb/lignite.png
[BS img]: https://travis-ci.org/mvidner/lignite.png
[CC img]: https://codeclimate.com/github/mvidner/lignite.png
[CS img]: https://coveralls.io/repos/mvidner/lignite/badge.png?branch=master

## Features

- Connect via USB or Bluetooth
- Execute Direct Commands
- Execute System Commands, including
    - Upload RBF programs
    - Run RBF programs
- Compile Ruby into RBF programs
- Supported platforms: Linux
  (bug reports or pull requests for Windows or Mac are also welcome)


## Getting Started

Running the built-in demo program: Connect the brick with a USB cable. Run

```sh
sudo ev3tool start BrkProg_SAVE/Demo.rpf
```

In the usual case where the folder and the program name are the same, a
shortcut works: `ev3tool start everstorm` is like `ev3tool start
everstorm/everstorm.rbf`.

> The `sudo` is needed to access the USB device.
> With udev you can configure the system to allow access to all users like this:
>
>     echo 'SUBSYSTEM=="usb", ATTRS{idVendor}=="0694", ATTRS{idProduct}=="0005", MODE="0666"' \
>       | sudo tee /etc/udev/rules.d/99-org-rubygems-lignite-lego-ev3.rules

To connect with Bluetooth, [configure the address](data/lignite-btaddr) and
pair the device (FIXME: how; troubleshooting?)

See also the included [examples](examples/).

### Hello World

```rb
require "lignite"
dc = Lignite::DirectCommands.new
dc.ui_draw_clean
dc.ui_draw_text(Lignite::FG_COLOR, 20, 40, "Hello, world!")
dc.ui_draw_update
```

## Acknowledgements

Thanks to David Lechner of the ev3dev project for the ev3.yml bytecodes file.