Hello,

Following is a part of my code for sending SET_ and GET_REPORT's to the USB
Device. When I try to send the GET_REPORT request after having sent the
SET_REPORT to the DCP, i get a DCP Submission failed error. Could anyone
tell me where the problem is?

UsbConfiguration config = usbDevice.getActiveUsbConfiguration();
List interfaces = new ArrayList();
interfaces = config.getUsbInterfaces();
UsbInterface interface0 = (UsbInterface)interfaces.get(0);      // my device
has only one interface, i.e, 0
try{
      interface.claim(new UsbInterfacePolicy() {
                                   public boolean forceClaim(UsbInterface
usbInterface){
                                          return true;
                                   }
                           });
      UsbInterfaceDescriptor interfaceDescriptor =
interface0.getUsbInterfaceDescriptor();
      Byte iClass = new Byte(interfaceDescriptor.bInterfaceClass());
      System.out.println("Interface Class is: " + iClass.toString());     //
It gives me 3, meaning a HID class device
}catch(Exception e){
      System.out.println("Interface not claimed! Exception! " +
e.getMessage());
}

//SET_REPORT
byte bmRequestType = 0x21;   <request type for SET_REPORT>
byte bRequest = 0x09;       <SET_REPORT: 0x09>
short wValue = 0x0201;      <i/o type: OUT, 02><report number:01>
short wIndex = 0;          <Interface number :0>
byte[] sendBuffer = {0x01,0x00,0x06,0x22,(byte)0xA0,(byte)0x85,0x00};
<ByteStream command to be sent to the device>
UsbControlIrp controlIrp1 = usbDevice.createUsbControlIrp(bmRequestType,
bRequest,wValue,wValue,wIndex);
controlIrp1.setData(sendBuffer);

if(!sendUsbControlIrp(usbDevice, controlIrp1)){
      System.out.println("SET_REPORT Not sent successfully");
}
System.out.println("Bytes sent to the device for SET_REPORT: " +
controlIrp1.getActualLength());

//GET_REPORT
 byte bmRequestType = 0xA1;   <request type for GET_REPORT>
byte bRequest = 0x01;       <GET_REPORT: 0x01>
short wValue = 0x0101;      <i/o type: IN, 01><report number:01>
short wIndex = 0;          <Interface number :0>
byte[] recieveBuffer = new byte[22];   <I Assume this is the buffer where
our requested data would come into, it is of 22 bytes>
UsbControlIrp controlIrp2 = usbDevice.createUsbControlIrp(bmRequestType,
bRequest,wValue,wValue,wIndex);
controlIrp2.setData(sendBuffer);

if(!sendUsbControlIrp(usbDevice, controlIrp2)){
      System.out.println("SET_REPORT Not sent successfully");
}
System.out.println("Bytes sent to the device for GET_REPORT: " +
controlIrp2.getActualLength());


I am not able to find out why i am not able to make the GET_REPORT request
to the device after having sent the SET_REPORT request. Could anyone help me
on this please!

Also, my USB RFID Reader has just 1 IN_Interrupt pipe from where the data
originates. When i issue the GET_REPORT to the DCP, do I get the report via
the DCP or do I have to use the UsbPipe of the In_Interrupt pipe to read the
tag information?
Please help needed! I am stuck!

Regards and thanks in advance!

Rahul Bourothu



On 8/7/08, Bourothu Rahul <[EMAIL PROTECTED]> wrote:
>
> Hi,
>
> I am using a USB RFID Reader to read the EPC code associated with a RFID
> tag on a Linux platform(using JSR80). The device uses ByteStream Protocol to
> communicate with the host. This protocol requires use of HID Report number
> 1.
> The read tag command as provided in the device specification is :
> <01><00><06><22><A0><85><00>
>
> I believe I have to use SET_REPORT(to send control) and GET_REPORT(to
> recieve data) to enable communication.
>
> In order to issue the read tag command, i am using the following header
> values(from the usb 1.1 HID specification):
>
> bmRequestType:   0x21
> bRequest:             0x09 (*SET_REPORT, to the device*)
> wValue:                0x0201 (<I/O Type><Report Number>)
> wIndex:                0x0000  (Interface number)
> wLength:              0x07  (Number of Bytes to send to the device)
> Data:                   <01><00><06><22><A0><85><00>
>
> I wrap this data in a *UsbControlIrp*, and send it to the device using 
> *syncSubmit
> *method.
>
> Later i have to read the report from the device using GET_REPORT. For this
> I would use the headers as follows:
> (The INPUT Report from the device would be of size 22 bytes)
> bmRequestType:  0xA1
>  bRequest:             0x01 (*GET_REPORT, from the device*)
> wValue:                0x0101 (<I/O Type><Report Number>)
> wIndex:                0x0000  (Interface number)
> wLength:              0x16  (Number of Bytes to be recieved from the
> device, 22 in HEX)
> Data:                   <empty> < I assume the data read from the device
> will be stored here>
>
> I again wrap this data in a UsbControlIrp and send it to the device using
> syncSubmit method.
> Is my approach correct or am I going wrong somewhere?
>
> Please let me know!
>
> Thank You
> Regards
> Rahul Bourothu
>



-- 
Rahul Bourothu
School of Engineering and Applied Science,
University of Pennsylvania,
Philadelphia, PA - 19104
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
javax-usb-devel mailing list
javax-usb-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/javax-usb-devel

Reply via email to