https://mbed.org/users/embeddedartists/code/EALib/#1c6134c80dc5