http://mbed.org/users/sam_grove/code/FP/#3c62ba1807ac