2015-01-28 8 views
2

Я разрабатываю приложение для своего собственного использования. Устройство Android взаимодействует с другими устройствами. Раньше я общался через Bluetooth, но на данный момент я меняю сообщение на USB. Я использую ksksue FTDriver. И я столкнулся с циклом мышления и не могу от него избавиться :)Последовательная связь с другими устройствами

В принципе, есть фиксированные 6 байтов данных, которые мне нужно получить с устройства. 2 байта данных и 4 байта CRC. Я принимал 1 байт на 1 и добавлял его в другой массив байтов, когда достигал 6 байтов, а затем возвращал их в новые массивы байтов и обрабатывал их, если CRC равен.

Это из Bluetooth приложение

public void run() { 
      byte[] buffer = new byte[1]; // buffer store for the stream 
      int bytesAvailable; // bytes returned from read() 

      // Keep listening to the InputStream until an exception occurs 
      while (true) { 
       try { 
        bytesAvailable = mmInStream.read(buffer); 

        System.arraycopy(buffer, 0, input_bytes_from, last, buffer.length); 
        last++; 
        if (last == 6){ 
         last = 0; 
         Log.d(TAG,"received "+bytesToHex(input_bytes_from)); 
        byte[] data_bytes = new byte[2]; 
        byte[] crc_to_compare = new byte[4]; 

        for(byte i=0;i<data_bytes.length;i++)data_bytes[i] = input_bytes_from[i]; 

        for(int i=0;i<4;i++){ 
         crc_to_compare[i] = input_bytes_from[i+data_bytes.length]; 
         } 
        crc_test(data_bytes,crc_to_compare); 

        } 
       } 
        catch (IOException e) { 
        break; 
       } 
      } 

     } 
  • Что происходит в байт/с, когда bytesAvailable = mmInStream.read(buffer); называется? Один байт скопирован и удален с mmInStream.read?
  • Есть ли более быстрый и лучший способ сделать это? Потому что, как я понимаю, копирование по одному байту происходит медленно?

ответ

0
  • Что происходит в байт/с, когда bytesAvailable = mmInStream.read(buffer); называется? Один байт скопирован и удален с mmInStream.read?

Да. Один байт удаляется из InputStream, а байт копируется в buffer.

  • Есть ли более быстрый и лучший способ сделать это? Потому что, как я понимаю, копирование по одному байту происходит медленно?

Вам не нужно читать байты один за другим. См. Следующий код.

public void run() { 
    // Keep listening to the InputStream until an exception occurs 
    while (true) { 
     try { 
      byte[] data_bytes = new byte[2]; 
      byte[] crc_to_compare = new byte[4]; 

      mmInStream.read(data_bytes); 
      mmInStream.read(crc_to_compare); 

      crc_test(data_bytes, crc_to_compare); 
     } catch (IOException e) { 
      break; 
     } 
    } 
} 

Существует система с открытым исходным кодом для последовательной связи с другими устройствами, называемыми NFCommunicator.

https://github.com/Neofect/NFCommunicator

Это может помочь вам сделать Android-приложение, которое общается с другими устройствами через последовательный протокол, как Bluetooth SPP, хотя это не для подключения USB в данный момент.

 Смежные вопросы

  • Нет связанных вопросов^_^