Hello

I am able to send and recieve data from a DLP design usb chip - but just one time per endpoint. When I send a loopback ex. data[0] = (byte)0x2; data[1] = (byte)0xAF; data[2] = (byte)0x14; data[3] = (byte)0xBF; I then get a 0x31 the first time, then I run the code again and I get the loopback 0x31, 0x60, "0x14" the "0x14" from the input.... and an exception.....

this is the code:

------------------------------------------------------------------------------------------------------------------

/*
* UsbComm.java
*
* Created on 18. oktober 2006, 09:00
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/

/**
*
* @author kaptajnen
*/


import java.util.*;
import javax.usb.*;
import javax.usb.util.*;
import java.io.*;
import java.lang.*;


public class UsbComm extends Thread
{

   /** Creates a new instance of UsbComm */
   public UsbComm()
   {
   }

   /**
    * @param args the command line arguments
    */
   public static void main(String argv[])
        {
                UsbHub virtualRootUsbHub = getVirtualRootUsbHub();
                List allUsbDevices = getAllUsbDevices(virtualRootUsbHub);
List usbHubs = getUsbDevicesWithDeviceClass(virtualRootUsbHub, UsbConst.HUB_CLASSCODE);

                System.out.println("Found " + allUsbDevices.size() + " devices 
total.");
                System.out.println("Found " + allUsbDevices.size() + " non-hub 
devices.");
System.out.println("Value of allUsbDevices index 0 "+ allUsbDevices.get(0)); //System.out.println("Value of allUsbDevices index 1 "+ allUsbDevices.get(1));

                allUsbDevices.removeAll(usbHubs);

                System.out.println("Found " + allUsbDevices.size() + " non-hub 
devices.");

                if (0 < allUsbDevices.size()) {


                        UsbDevice usbDevice = (UsbDevice)allUsbDevices.get(1);

                       testIO(usbDevice);

                } else {
                        System.out.println("No non-hub devices were found.");
                }
        }

       public static UsbHub getVirtualRootUsbHub()
        {
                UsbServices services2 = null;
                UsbHub virtualRootUsbHub = null;

                /* First we need to get the UsbServices.
                 * This might throw either an UsbException or SecurityException.
                 * A SecurityException means we're not allowed to access the 
USB bus,
                 * while a UsbException indicates there is a problem either in
                 * the javax.usb implementation or the OS USB support.
                 */
                try {
                        services2 = UsbHostManager.getUsbServices();
                } catch ( UsbException uE ) {
                        throw new RuntimeException("Error : " + 
uE.getMessage());
                } catch ( SecurityException sE ) {
                        throw new RuntimeException("Error : " + 
sE.getMessage());
                }

                /* Now we need to get the virtual root UsbHub,
                 * everything is connected to it.  The Virtual Root UsbHub
                 * doesn't actually correspond to any physical device, it's
                 * strictly virtual.  Each of the devices connected to one of 
its
                 * ports corresponds to a physical host controller located in
                 * the system.  Those host controllers are (usually) located 
inside
                 * the computer, e.g. as a PCI board, or a chip on the 
mainboard,
                 * or a PCMCIA card.  The virtual root UsbHub aggregates all 
these
                 * host controllers.
                 *
                 * This also may throw an UsbException or SecurityException.
                 */
                try {
                        virtualRootUsbHub = services2.getRootUsbHub();
                } catch ( UsbException uE ) {
                        throw new RuntimeException("Error : " + 
uE.getMessage());
                } catch ( SecurityException sE ) {
                        throw new RuntimeException("Error : " + 
sE.getMessage());
                }

                return virtualRootUsbHub;
        }
       public static List getAllUsbDevices(UsbDevice usbDevice)
        {
                List list = new ArrayList();

                list.add(usbDevice);

                /* this is just normal recursion.  Nothing special. */
                if (usbDevice.isUsbHub()) {
                        List devices = 
((UsbHub)usbDevice).getAttachedUsbDevices();
                        for (int i=0; i<devices.size(); i++)
                                
list.addAll(getAllUsbDevices((UsbDevice)devices.get(i)));
                }

                return list;
        }

public static List getUsbDevicesWithDeviceClass(UsbDevice usbDevice, byte deviceClass)
        {
                List list = new ArrayList();

/* See above about comparing unsigned numbers, note this is an unsigned byte. */
                if (deviceClass == 
usbDevice.getUsbDeviceDescriptor().bDeviceClass())
                        list.add(usbDevice);

                /* this is just normal recursion.  Nothing special. */
                if (usbDevice.isUsbHub()) {
                        List devices = 
((UsbHub)usbDevice).getAttachedUsbDevices();
                        for (int i=0; i<devices.size(); i++)
list.addAll(getUsbDevicesWithDeviceClass((UsbDevice)devices.get(i), deviceClass));
                }

                return list;
        }
       public static void testIO(UsbDevice device)
       {
       try
         {

       String manufacturer = device.getManufacturerString();
        System.out.println("manufacturer: "+manufacturer);

       // Access to the active configuration of the USB device, obtain
      // all the interfaces available in that configuration.
      UsbConfiguration config = device.getActiveUsbConfiguration();
      List totalInterfaces = config.getUsbInterfaces();


      int antal = totalInterfaces.size();
      System.out.println("antal interfaces "+ antal);

      // Traverse through all the interfaces, and access the endpoints
      // available to that interface for I/O.
      for (int i=0; i<totalInterfaces.size(); i++)
      {


          //hvilket inderface hentes??

          UsbInterface interf = (UsbInterface) totalInterfaces.get(i);

//Interfacet tvinges til tilhorsforhold - vaer paapasselig med hvilket interface der kraves adgang til!!
          interf.claim(new UsbInterfacePolicy()
          {
           public boolean forceClaim(UsbInterface usbInterface)
           {
           return true;
           }
          }
          );

          String interfacetext = interf.getInterfaceString();
          System.out.println("interface text: "+interfacetext);

          //boolean test_isclaimed = interf.isClaimed();
//System.out.println("interface er gjort krav paa: "+test_isclaimed);


           //boolean test_isactive = interf.isActive();
          //System.out.println("interface er aktivt: "+test_isactive);

          List totalEndpoints = interf.getUsbEndpoints();
         int antalendpoints = totalEndpoints.size();
         System.out.println("antal endpoints: "+antalendpoints);


//----------------------------------------------------------------


            UsbEndpoint inep = (UsbEndpoint) totalEndpoints.get(0);
            Usbread ur = new Usbread(inep);
            Thread ept = new Thread(ur);
            ept.start();
//----------------------------------------------------------------

           // Access the particular endpoint, determine the direction
            // of its data flow, and type of data transfer, and open the
            // data pipe for I/O.
         UsbEndpoint ep = (UsbEndpoint) totalEndpoints.get(1);
             int direction = ep.getDirection();
            if (direction == UsbConst.ENDPOINT_DIRECTION_OUT)
            {
System.out.println("endpoint: fra vaert (pc) til usb enhed");
            }
            else
            {
System.out.println("endpoint: fra usb enhed til vaert (pc)");
            }
            int type = ep.getType();

            switch(type)
            {
                case UsbConst.ENDPOINT_TYPE_CONTROL:
System.out.println("control endpoint: der konfigurer og kontrolere usb device og bus");
                    break;

                case UsbConst.ENDPOINT_TYPE_BULK:
System.out.println("bulk endpoint: data transmision uden tab af data");
                    break;

                case UsbConst.ENDPOINT_TYPE_INTERRUPT:
System.out.println("interrupt endpoint: et foresporgsels endpoint type - bruges til kald");
                    break;

                case UsbConst.ENDPOINT_TYPE_ISOCHRONOUS:
System.out.println("asynckront transmision endpoint: transmision med garanteret data hastighed");
                    break;
                default:
                    System.out.println("ikke genkendt type");
            }

            UsbPipe pipe = ep.getUsbPipe();

            // Her starter selve USB I/O

int maxPakkeStorrelse = ep.getUsbEndpointDescriptor().wMaxPacketSize(); System.out.println("maks pakke storrelse: "+ maxPakkeStorrelse);

            UsbIrp irp = pipe.createUsbIrp();


            pipe.open();

             byte[] data = new byte[maxPakkeStorrelse];


             //data[0] = (byte)0x03;
             //data[1] = (byte)0xA6;
             //data[2] = (byte)0xE5;
             //data[3] = (byte)0x1;
             //data[4] = (byte)0x41;

             data[0] = (byte)0x2;
             data[1] = (byte)0xAF;
             data[2] = (byte)0x14;
             data[3] = (byte)0xBF;

             irp.setData(data);
             irp.setUsbException(null);
//irp.setComplete(false); //setcomplete skal sættes til false ved genbrug af pipe

             pipe.syncSubmit(irp);

              for(i=0; i<10; i++)
            {
               String usbtestnr = UsbUtil.toHexString(data[i]);
               System.out.println(usbtestnr);
            }


             irp.setComplete(false);
           pipe.abortAllSubmissions();


           // Her slutter selve USB I/O
            pipe.close();


         interf.release();
      }
} catch (Exception e) {System.out.println("claim exception hvis usb er inaktivt eller allerede tilhore andet interface!!");}
}


}

-----------------------------------------------------------------------------------------------------------


/*
* Usbread.java
*
* Created on 28. oktober 2006, 09:40
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/

/**
*
* @author kaptajnen
*/

import java.util.*;
import javax.usb.*;
import javax.usb.util.*;
import java.io.*;
import java.lang.*;


public class Usbread implements Runnable
{

   UsbEndpoint inep;
   /** Creates a new instance of Usbread */
   public Usbread(UsbEndpoint ep)
   {
       inep=ep;
   }
   public void run()
   {
       try
       {
           // Access the particular endpoint, determine the direction
            // of its data flow, and type of data transfer, and open the
            // data pipe for I/O.

            UsbPipe pipein = inep.getUsbPipe();
            pipein.open();
            // Her starter selve USB I/O

int inmaxPakkeStorrelse = inep.getUsbEndpointDescriptor().wMaxPacketSize(); System.out.println("maks pakke storrelse: "+ inmaxPakkeStorrelse);

            UsbIrp irpin = pipein.createUsbIrp();
             byte[] datain = new byte[inmaxPakkeStorrelse];

             irpin.setData(datain);
             irpin.setUsbException(null);
//irpin.setComplete(false);//setcomplete skal sættes til false ved genbrug af pipe

            pipein.syncSubmit(irpin);

            for(int i=0; i<10; i++)
            {
               String usbtestnr = UsbUtil.toHexString(datain[i]);
               System.out.println(usbtestnr);
            }

            irpin.setComplete(false);

           pipein.abortAllSubmissions();

           // Her slutter selve USB I/O
            pipein.close();
       }
catch (Exception e) {System.out.println("Er der nogen expetion her??");}
   }

}



Kind regards

Stefan Banke

_________________________________________________________________
Find dine dokumenter lettere med MSN Toolbar med Windows-pc-søgning: http://toolbar.msn.dk


-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
javax-usb-devel mailing list
javax-usb-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/javax-usb-devel

Reply via email to