Initial pass at device abstraction

This should go before #118 
comment not correct. Also, explain the difference between system timestamp and display timestamp?