use usb-skeleton.c as reference