Surface I/O: Creating Devices with Functional Surface Geometry for Haptics and User Input