3

任何人都可以帮我处理这段代码吗?

我想从android传输到USB。我在尝试将数据从我的 android 代码发送到外部 USB 设备时遇到一些技术问题。我有供应商和其他信息;

这是我的设备供应商信息:

<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

这是我的代码:

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();




        }
    }

问题是我有一个 USB 红外线和我的安卓设备。我的安卓设备有 2 个 USB 端口。我想将此字节“55 AA 81 8 F7 A F5 0”发送到红外主机。我知道这有点复杂,但谢谢大家!

4

2 回答 2

1

据我所知,问题是您期望字符串“55 AA 81 8 F7 A F5 0”通过调用 String.getBytes() 被解释为 0x55 0xAA 0x81 0x08 0xF7 0x0A 0xF5 0x00,这不是你会得到的。您将获得代表字符串字符(包括空格)的字节数组,而不是您想要的字节数组。

代替

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

您需要简单地指定字节数组,如下所示:

byte[] bytes = {
  0x55,
  0xAA, 
  0x81,
  0x08,
  (byte) 0xF7,
  0x0A,
  (byte) 0xF5,
  0x00};
于 2015-02-26T15:22:59.030 回答
0

@user4610842,你检查过你的答案了吗?怎么

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

0xAA 和 0x81 与它们在 java 中的 int 相差甚远。

于 2020-12-04T09:17:52.283 回答