Make device API more abstract as to support more classes of devices