starting to add interfaces to abstract any hardware interaction for testing