適当なハードとそのUSB仕様が手に入ればプログラム自体はそんなに難しくない。
ただし↑の方が実は難しいという罠。

/usr/src/linux/drivers/usbとかの下を見て、適当にアレンジすればよいと思う。
(どれも高々500行程度なのでいくつか読んでれば書き方のパターンが見えてくる)
内部解説が欲しい場合ははオライリー「Linuxデバイスドライバ」とusb.hを見るべし。
USBプロトコル仕様はInterface増刊とかに載ってる。ここにはLinuxサンプルドライバも
載ってるが、あまり見ないほうが良い(w

h/wの違いはLinux側で吸収してくれるので考慮する必要は無し。…と思う。
以上、健闘を祈る。