Victor Ruiz.
Victor Ruiz.

Reputation: 1732

How to send data from android to Host USB device

Can anyOne help me with this code?

I would like to transmit from android to USB. I Have some technical problems trying to send data from my android code to an external USB device. I have the vendor and other info;

This is my device vendor info:

<resources>
    <usb-device
        class="0"
        product-id="30209"
        protocol="0"
        subclass="0"
        vendor-id="5263" />
</resources>



String s = "55 AA 81 8 F7 A F5 0";
                    byte [] bytes = s.getBytes();
                    connection.bulkTransfer(endpoint, bytes, bytes.length, 0); //do in another thread

This is my code:

private void doYourOpenUsbDevice(final UsbDevice usbDevice) {
        // now follow line will NOT show: User has not given permission to
        // device UsbDevice
         final UsbDeviceConnection connection = mUsbManager.openDevice(usbDevice);
        // here is your device-
        if(usbDevice.getDeviceId()==2002)
        {


            Thread thread = new Thread(new Runnable() {
                public void run() {
                    //call method to set up device communication
                    UsbInterface intf = usbDevice.getInterface(0);
                    connection.claimInterface(intf, false);

                    //connection settings
                    int op= connection.controlTransfer(0x40, 0, 0, 0, null, 0, 0);// reset   //0x40
                    int op2= connection.controlTransfer(0x40, 0, 1, 0, null, 0, 0);//clear Rx  
                    int op3= connection.controlTransfer(0x40, 0, 2, 0, null, 0, 0);// clear Tx
                    int op3b=  connection.controlTransfer(0x40, 0x02, 0x0000, 0, null, 0, 0);//control flow

                    int op4= connection.controlTransfer(0x40, 0x03, 0x001A, 0, null, 0, 0);// baud rate 115200
                    int op5= connection.controlTransfer(0x40, 0x04, 0x0008, 0, null, 0, 0);//8 bit




                    int endPts = intf.getEndpointCount();

                    for(int e = 0; e < endPts; e++){
                        UsbEndpoint endpoint = intf.getEndpoint(e);
                        endpoint.getAttributes();

                        if( endpoint.getType() == UsbConstants.USB_ENDPOINT_XFER_BULK){
                            if(endpoint.getDirection() == UsbConstants.USB_DIR_IN){
                                input = endpoint;
                                Log.d("Endpoint", "Got input");


                            }else if(endpoint.getDirection() == UsbConstants.USB_DIR_OUT){
                                output = endpoint;
                                Log.d("Endpoint", "Got output");
                            }                       
                        }
                    }
                   int f =  connection.controlTransfer(0x21, 34, 0, 0, null, 0, 0);
                   int f2 = connection.controlTransfer(0x21, 32, 0, 0, new byte[] { (byte) 0x80,
                                                    0x25, 0x00, 0x00, 0x00, 0x00, 0x08 }, 7, 0);
                   System.out.println(f +"  "+ f2 ); 
                   }
                });
            thread.start();




        }
    }

The thing is that i have an USB Infrared and my android device as well. My android device has 2 USB ports. I would like to send this bytes "55 AA 81 8 F7 A F5 0" to the Infrared Host. I know that is a little bit complicated but thank you for all!

Upvotes: 3

Views: 2693

Answers (2)

M. Adil
M. Adil

Reputation: 1

@user4610842, have you checked your answer? how is

 byte[] bytes = {
  0x55,
  0xAA, 
  0x81,
  0x08,
  (byte) 0xF7,
  0x0A,
  (byte) 0xF5,
  0x00};

0xAA and 0x81 are nowhere near a byte they are int in java.

Upvotes: 0

user4610842
user4610842

Reputation: 11

The problem, from what I can see, is that you're expecting the string "55 AA 81 8 F7 A F5 0" to be interpreted as 0x55 0xAA 0x81 0x08 0xF7 0x0A 0xF5 0x00 with the call to String.getBytes(), which is not what you're going to get. In stead of the byte array you want, you're going to get the byte array which represent the characters of your string (including the spaces).

In stead of

String s = "55 AA 81 8 F7 A F5 0";
byte [] bytes = s.getBytes();

You need to simply specify the byte array, like so:

byte[] bytes = {
  0x55,
  0xAA, 
  0x81,
  0x08,
  (byte) 0xF7,
  0x0A,
  (byte) 0xF5,
  0x00};

Upvotes: 1

Related Questions