Reputation: 1732
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
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
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