Portability refactor Documentation

The purpose of this document is to outline the current problems with Smoothie's portability,
propose a solution and guide the implementation.

The problem

Though Smoothie is based on mBed, it is not easily ported to other boards / processors.

For various reasons, suchs as conceptual mismatch between needed and actually functionality
by mBed, not everything Smoothie does can use mBed.

This simple fact means that some porting work will alway be necessary - but we could reduce the effort needed
by centralizing the chip specific functions in a - Smoothie specific - hardware abstraction layer (HAL).

Proposed solution

Refactor everything LPC17xx specific into a new folder structure /hal/LPC17xx.

Check everything whether it can be replaced if we were using a newer version of mBed. If so, update and refactor to use these mBed libs.

Finally, prove that porting is possible by actually doing it.

Please note that no. 1 is basically run time neutral (given a sufficiently smart compiler).
Step 3 would be a good time to add even very detailed comments to the LPC HAL guiding further ports.

Details

The affected subsystems are

GPIO

Timers / Tickers

SPI

Watchdog

Ethernet (refactor, possibly the port can leave it out for the time being)

USB

Makefile system (at least for the final porting step)

There is a surprisingly small number of files that contain 'LPC'.
Here's what FF proposes to do abouth them

libs/ADC/adc.cpp -> ?

adc.cpp is a special ADC library for mBed that does burst mode, where the normal mBed lib does not. it should be moved to the HAL —arthur

./libs/FPointer.h -> just a comment about data sizes -> Replace with ARM c3

Jim says, should use std::function —arthur

The only place FPointer is used is in Hook.cpp - it derives a class adding interval and countdown. Could be combined? —Flo

Open Questions

What's the difference between the clasess in GPIO and Pin? Pin is used just about everywhere, GPIO only in Step/SlowTicker.cpp - once to apperantly toggle some Leds, once to optionally toggle a debug pin. Any reason not to replace these two instances with Pin and remove GPIO? —Flo