Hi Dean and other list members,
I'm currently working on a project which uses serveral multi-touch screens. Each multi-touch screen has a USB digitizer output which is a USB HID. My problem is that when using several of these multi-touch screens, the OS doesn't deal with them correctly (or at least in Windows the OS doesn't). I want to make 4 or mor digitizers appear as one big digitizer to the host machine. Rather than trying to re-write the driver i'm doing this:
-Connect the USB output of each digitizer to a raspberry pi
-read the USB data on the rPi using libusb
-send the data using UDP to an arduino with an ethernet shield
-modifiy the data (if necessary) and send it to the host device
The first steps are quite easy, and working. The USB data stage is getting to the Arduino UNO correctly. Now, I just need to use LUFA to make the Arduino UNO identify itself as a USB HID and send the data through to the host.
I know that Darran Hunt was doing something similar for a HID Keyboard, so I'm roughly following what he has been doing. Unfortunately, mine is still not working. I don't seem to be generating HID reports. Given the whole thing is in the bootloader, i'm not great at debugging this sort of thing. I was hoping for a bit of help on this. Also, unlike keyboard reports which are 8 bytes, the HID reports from the digitiser are 64 bytes.
If I connect the digitizer to a linux device, the lsusb -v info is this:
Bus 001 Device 082: ID 0596:0506 MicroTouch Systems, Inc.
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0596 MicroTouch Systems, Inc.
idProduct 0x0506
bcdDevice 1.08
iManufacturer 1 3M
iProduct 2 3M MicroTouch USB controller
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 34
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xe0
Self Powered
Remote Wakeup
MaxPower 0mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 0 No Subclass
bInterfaceProtocol 0 None
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.10
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 728
Report Descriptors:
** UNAVAILABLE **
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 1
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
If I change the descriptor.c file, I can get the Arduino to basically produce the same content. I just seem to have a problem getting the data into the HID report.
Any help would be great!
Thanks,
Corey