# Buildbotics CNC Controller Firmware
This repository contains the source code for the Buildbotics CNC Controller.
See [buildbotics.com](https://buildbotics.com/) for more information.

![Buildboitcs CNC Controller](docs/buildbotics_controller.png)

## Overview
![Buildbotics architecture overview](docs/buildbotics_architecture_overview.png)

The main parts of the Buildbotics CNC Controller software and the technologies
they are built with are as follows:

 * Web App - Frontend user interface
   * [Javascript](https://www.w3schools.com/js/)
   * [HTML5](https://www.w3schools.com/html/)
   * [Stylus](http://stylus-lang.com/)
   * [Pug.js](https://pugjs.org/)
   * [Vue.js](https://vuejs.org/)

 * Controller OS - RaspberryPi Operating System
   * [Raspbian](https://www.raspbian.org/)

 * BBCtrl - Python App
   * [Python 3](https://www.python.org/)
   * [Tornado Web](https://www.tornadoweb.org/)

 * GPlan - Path Planner Python Module
   * [C++](http://www.cplusplus.com/)
   * [CAMotics](https://camotics.org/)

 * Main AVR Firmware + Bootloader - Real-time step generation, etc.
   * [ATxmega192a3u](https://www.microchip.com/wwwproducts/ATxmega192A3U)
   * [C](https://en.wikipedia.org/wiki/C_(programming_language))

 * Pwr AVR Firmware - Power safety
   * [ATtiny1634](https://www.microchip.com/wwwproducts/ATtiny1634)
   * [C](https://en.wikipedia.org/wiki/C_(programming_language))

## Quickstart Guide

Be sure to read the [development guide](docs/development.md) for more detailed
instructions.

On a Debian Linux (9.6.0 stable) system:

    # Install the required packages
    sudo apt-get update
    sudo apt-get install -y build-essential git wget binfmt-support qemu \
      parted gcc-avr avr-libc avrdude pylint3 python3 python3-tornado curl \
      unzip python3-setuptools
    curl -sL https://deb.nodesource.com/setup_11.x | sudo -E bash -
    sudo apt-get install -y nodejs

    # Get the source
    git clone https://github.com/buildbotics/bbctrl-firmware

    # Build the Firmware
    cd bbctrl-firmware
    make pkg

The resulting package will be a ``.tar.bz2`` file in ``dist``.  See the
[development guide](docs/development.md) for more information.
