<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:p="urn:schemas-microsoft-com:office:powerpoint" xmlns:a="urn:schemas-microsoft-com:office:access" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema" xmlns:b="urn:schemas-microsoft-com:office:publisher" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet" xmlns:odc="urn:schemas-microsoft-com:office:odc" xmlns:oa="urn:schemas-microsoft-com:office:activation" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:q="http://schemas.xmlsoap.org/soap/envelope/" xmlns:rtc="http://microsoft.com/officenet/conferencing" xmlns:D="DAV:" xmlns:Repl="http://schemas.microsoft.com/repl/" xmlns:mt="http://schemas.microsoft.com/sharepoint/soap/meetings/" xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml" xmlns:ppda="http://www.passport.com/NameSpace.xsd" xmlns:ois="http://schemas.microsoft.com/sharepoint/soap/ois/" xmlns:dir="http://schemas.microsoft.com/sharepoint/soap/directory/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:dsp="http://schemas.microsoft.com/sharepoint/dsp" xmlns:udc="http://schemas.microsoft.com/data/udc" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sub="http://schemas.microsoft.com/sharepoint/soap/2002/1/alerts/" xmlns:ec="http://www.w3.org/2001/04/xmlenc#" xmlns:sp="http://schemas.microsoft.com/sharepoint/" xmlns:sps="http://schemas.microsoft.com/sharepoint/soap/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:udcs="http://schemas.microsoft.com/data/udc/soap" xmlns:udcxf="http://schemas.microsoft.com/data/udc/xmlfile" xmlns:udcp2p="http://schemas.microsoft.com/data/udc/parttopart" xmlns:wf="http://schemas.microsoft.com/sharepoint/soap/workflow/" xmlns:dsss="http://schemas.microsoft.com/office/2006/digsig-setup" xmlns:dssi="http://schemas.microsoft.com/office/2006/digsig" xmlns:mdssi="http://schemas.openxmlformats.org/package/2006/digital-signature" xmlns:mver="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns:mrels="http://schemas.openxmlformats.org/package/2006/relationships" xmlns:spwp="http://microsoft.com/sharepoint/webpartpages" xmlns:ex12t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:ex12m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:pptsl="http://schemas.microsoft.com/sharepoint/soap/SlideLibrary/" xmlns:spsl="http://microsoft.com/webservices/SharePointPortalServer/PublishedLinksService" xmlns:Z="urn:schemas-microsoft-com:" xmlns:st="" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=Content-Type content="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang=EN-US link=blue vlink=purple>
<div class=Section1>
<p class=MsoNormal>I’m interested in using libhid to access a custom HID
device that we are developing on a PIC microcontroller. I have been able
to successfully get the test_libhid code to run, and have attempted to use the guidelines
provided in the code for reading and writing to our device. So far, I
have not been to successfully read or write to the device, and I suspect the
reason may be that the report descriptor for our devices specifies a 64 byte
array for both the input and output data reports.<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>I have read the details contained in the Device Class
Definition for HID section from usb.org, and I think that I understand how
descriptors work in general and how they translate to HID paths, but my
attempts to read and write data to the device have failed. We have
verified that the device works in Windows, so I believe my problem is on the Linux
side. I read in another posting that the MGE parser has problems parsing
arrays, and I’m wondering if this may be where my problems lie.<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>I don’t think that it should matter, but I should note
that I’m currently working in a VMWare virtual machine, loaded with
Ubuntu 8.04 server<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>Can anyone provide some guidance on how to specify he HID
path for the following report descriptor (generated from lsusb –vvv):<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>
Report Descriptor: (length is 29)<o:p></o:p></p>
<p class=MsoNormal>
Item(Global): Usage Page, data= [ 0x00 0xff ] 65280 <o:p></o:p></p>
<p class=MsoNormal>
(null)<o:p></o:p></p>
<p class=MsoNormal>
Item(Local ): Usage, data= [ 0x01 ] 1<o:p></o:p></p>
<p class=MsoNormal>
(null)<o:p></o:p></p>
<p class=MsoNormal>
Item(Main ): Collection, data= [ 0x01 ] 1<o:p></o:p></p>
<p class=MsoNormal>
Application<o:p></o:p></p>
<p class=MsoNormal>
Item(Local ): Usage Minimum, data= [ 0x01 ] 1<o:p></o:p></p>
<p class=MsoNormal>
(null)<o:p></o:p></p>
<p class=MsoNormal>
Item(Local ): Usage Maximum, data= [ 0x40 ] 64<o:p></o:p></p>
<p class=MsoNormal>
(null)<o:p></o:p></p>
<p class=MsoNormal>
Item(Global): Logical Minimum, data= [ 0x00 ] 0<o:p></o:p></p>
<p class=MsoNormal>
Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255<o:p></o:p></p>
<p class=MsoNormal>
Item(Global): Report Size, data= [ 0x08 ] 8<o:p></o:p></p>
<p class=MsoNormal>
Item(Global): Report Count, data= [ 0x40 ] 64<o:p></o:p></p>
<p class=MsoNormal>
Item(Main ): Input, data= [ 0x02 ] 2<o:p></o:p></p>
<p class=MsoNormal>
Data Variable Absolute No_Wrap Linear<o:p></o:p></p>
<p class=MsoNormal>
Preferred_State No_Null_Position Non_Volatile Bitfield<o:p></o:p></p>
<p class=MsoNormal>
Item(Local ): Usage Minimum, data= [ 0x01 ] 1<o:p></o:p></p>
<p class=MsoNormal>
(null)<o:p></o:p></p>
<p class=MsoNormal>
Item(Local ): Usage Maximum, data= [ 0x40 ] 64<o:p></o:p></p>
<p class=MsoNormal>
(null)<o:p></o:p></p>
<p class=MsoNormal>
Item(Main ): Output, data= [ 0x02 ] 2<o:p></o:p></p>
<p class=MsoNormal>
Data Variable Absolute No_Wrap Linear<o:p></o:p></p>
<p class=MsoNormal>
Preferred_State No_Null_Position Non_Volatile Bitfield<o:p></o:p></p>
<p class=MsoNormal>
Item(Main ): End Collection, data=none<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>Also, here is the parse tree that was generated by the
test_libhid program:<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>parse tree of HIDInterface 001/007[0]:<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x80<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal> path: 0xff000001.0x00000000; type: 0x90<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>Any guidance or suggestions would be most greatly
appreciated.<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>Thank you, <o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>Steve Hawkins<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
</div>
</body>
</html>