Android USB массовая передача Teensy2 ++ медленное обновление - PullRequest
0 голосов
/ 07 января 2020

Я отправляю данные на Android 9 SB C через rawhid на teensy2 ++.

Мне удалось установить двухстороннюю связь, однако получение обновления происходит очень медленно, примерно каждые половину секунда.

Вот соответствующий код, с которым я работаю до сих пор.

Я открываю устройство с помощью:

 public void openUsb(View view){
    if(connected == true){
        HashMap<String , UsbDevice> deviceList = mManager.getDeviceList();
        Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();

        while (deviceIterator.hasNext()) {
            UsbDevice tempDevice = deviceIterator.next();
            if ((Integer.toHexString(tempDevice.getVendorId()).equalsIgnoreCase(Vid)) && (Integer.toHexString(tempDevice.getProductId()).equalsIgnoreCase(Pid))) {

                {
                    mDevice = tempDevice;

                    mUsbInterface = mDevice.getInterface(0);
                    mEndpointWrite = mUsbInterface.getEndpoint(1);
                    mEndpointRead = mUsbInterface.getEndpoint(0);

                    connection = mManager.openDevice(mDevice);

                    boolean claim = connection.claimInterface(mUsbInterface, true);

                    if (claim == true) {
                        writeToStatus("USB Connection Claimed");
                    }
                    else{
                        writeToStatus("USB Connection Claim failed");
                    }
                }
            }
        }
    }
    else{
        writeToStatus("Check USB Connection");
    }
}

Я могу записать на устройство с помощью:

    public void writeStart(View view) {

    if(connected == true) {

        final int BUF_LEN = 2;

        byte buf[] = new byte[BUF_LEN];
        buf[0] =1;
        buf[1] =5;

        int res = connection.bulkTransfer(mEndpointWrite, buf, buf.length, 1000);
        writeToStatus(String.valueOf(res));
    }
    else{
        writeToStatus("Check USB Connection");
    }
}

и чтение ведется в собственном исполняемом потоке

    public void readUsb(View view) {
     handler.postDelayed(runnable, 1);
}

  private Runnable runnable = new Runnable() {
    @Override
    public void run() {
        if(connected == true) {

            String strYaw ;
            String strPitch ;
            String strRoll ;

            byte[] recordIn = new byte[16];
            int receivedLength = connection.bulkTransfer(mEndpointRead, recordIn, recordIn.length, 10);
            if (receivedLength > -1) {

                byte[] tempYaw = new byte[4];
                byte[] tempPitch = new byte[4];
                byte[] tempRoll = new byte[4];

                tempYaw[0] = recordIn[3];
                tempYaw[1] = recordIn[2];
                tempYaw[2] = recordIn[1];
                tempYaw[3] = recordIn[0];

                float Yaw = bytearray2float(tempYaw);

                strYaw = "Y:" + Yaw;

                Message msg = handler.obtainMessage();
                Bundle bundle = new Bundle();
                bundle.putString("yaw", strYaw );
                msg.setData(bundle);
                handler.sendMessage(msg);
            }

            handler.postDelayed(this, 10); 
        }
    }
};

Кто-нибудь видел это раньше или есть идеи о том, как ускорить общение? Если я подключаю устройство для подростков к windows и запускаю SimpleHidWrite, я получаю ожидаемую частоту обновления, поэтому я считаю, что устройство работает правильно.

Спасибо за любую помощь по этому

1 Ответ

0 голосов
/ 08 января 2020

Проблема была исправлена ​​путем удаления всех использований Serial в коде teensy,

Я дублировал запись Hid в записи Serial для отладки, так как я не читаю конечные точки последовательного порта в Android Я полагаю, это было приостановлено на тайм-аут или что-то?

...