added initial uinput support. TODO: major cleanups