2015-03-23 7 views
0

Я создаю клиентское приложение для чтения данных с платы CSR через SPP (канал RFCOMM). Для этой цели я использовал пример приложения из Android SDK (Bluetooth-чат), и он отлично работает для небольших объемов данных. Но когда я передаю музыку с доски на устройство, появляется задержка. Я измерил задержку во время цикла, где мы читаем InputStream, подключенный к разъему Bluetooth, и заметил интересный момент - задержка является большой только для некоторых итераций цикла, но для других задержка очень мала - например, 0-10 мс. Может быть, кто-то знает, почему это происходит? И как я могу исправить эту проблему?Проблема с частотой Bluetooth для Bluetooth

Вот код:

public void run() { 
      Log.i(TAG, "BEGIN mConnectedThread"); 
      byte[] buffer = new byte[2048]; 

      // Keep listening to the InputStream while connected 
      while (true) { 
       try { 
        // Read from the InputStream 
        int byteCount = mmInStream.read(buffer); 

        Log.d("unique_time", (System.currentTimeMillis() - lastTime) + " " + byteCount); 
        lastTime = System.currentTimeMillis(); 
       } catch (IOException e) { 
        Log.e(TAG, "disconnected", e); 
        connectionLost(); 
        break; 
       } 
      } 
     } 

и журналы выборки (первое число - приращение времени в мс, второй один - читать байт):

03-23 14:45:16.481 24432-25373/coderivium.sbctest D/unique_time﹕ 491 884 
03-23 14:45:16.491 24432-25373/coderivium.sbctest D/unique_time﹕ 2 140 
03-23 14:45:16.491 24432-25373/coderivium.sbctest D/unique_time﹕ 8 884 
03-23 14:45:19.481 24432-25373/coderivium.sbctest D/unique_time﹕ 2985 884 
03-23 14:45:19.491 24432-25373/coderivium.sbctest D/unique_time﹕ 7 884 
03-23 14:45:19.491 24432-25373/coderivium.sbctest D/unique_time﹕ 2 214 
03-23 14:45:19.501 24432-25373/coderivium.sbctest D/unique_time﹕ 12 884 
03-23 14:45:19.501 24432-25373/coderivium.sbctest D/unique_time﹕ 2 140 
03-23 14:45:19.511 24432-25373/coderivium.sbctest D/unique_time﹕ 7 884 
03-23 14:45:19.511 24432-25373/coderivium.sbctest D/unique_time﹕ 1 74 
03-23 14:45:19.531 24432-25373/coderivium.sbctest D/unique_time﹕ 21 884 
03-23 14:45:19.531 24432-25373/coderivium.sbctest D/unique_time﹕ 2 140 
03-23 14:45:19.551 24432-25373/coderivium.sbctest D/unique_time﹕ 11 884 
03-23 14:45:19.551 24432-25373/coderivium.sbctest D/unique_time﹕ 6 884 
03-23 14:45:19.561 24432-25373/coderivium.sbctest D/unique_time﹕ 7 884 
03-23 14:45:19.561 24432-25373/coderivium.sbctest D/unique_time﹕ 1 214 
03-23 14:45:19.571 24432-25373/coderivium.sbctest D/unique_time﹕ 11 884 
03-23 14:45:19.581 24432-25373/coderivium.sbctest D/unique_time﹕ 6 884 
03-23 14:45:19.581 24432-25373/coderivium.sbctest D/unique_time﹕ 1 214 
03-23 14:45:19.591 24432-25373/coderivium.sbctest D/unique_time﹕ 7 884 
03-23 14:45:19.591 24432-25373/coderivium.sbctest D/unique_time﹕ 6 884 
03-23 14:45:19.591 24432-25373/coderivium.sbctest D/unique_time﹕ 2 214 
03-23 14:45:19.601 24432-25373/coderivium.sbctest D/unique_time﹕ 7 884 
03-23 14:45:19.661 24432-25373/coderivium.sbctest D/unique_time﹕ 57 884 
03-23 14:45:19.661 24432-25373/coderivium.sbctest D/unique_time﹕ 2 214 
03-23 14:45:19.671 24432-25373/coderivium.sbctest D/unique_time﹕ 6 884 
03-23 14:45:19.671 24432-25373/coderivium.sbctest D/unique_time﹕ 6 884 
03-23 14:45:19.681 24432-25373/coderivium.sbctest D/unique_time﹕ 2 214 
03-23 14:45:19.681 24432-25373/coderivium.sbctest D/unique_time﹕ 6 884 
03-23 14:45:19.691 24432-25373/coderivium.sbctest D/unique_time﹕ 6 884 
03-23 14:45:19.691 24432-25373/coderivium.sbctest D/unique_time﹕ 2 204 
+0

Взгляните на: http://stackoverflow.com/questions/14524866/android-bluetooth-serial-rfcomm-low-baud-rate-slow-transmission и http://stackoverflow.com/questions/9257260/ Android-bluetooth-slow-data-rates-calculate-from-bluetoothsocket – Petro

+0

Спасибо! Но как насчет задержек? Почему скорость меняется так значительно? –

+0

Я не использовал Bluetooth достаточно для ответа, но я предполагаю, что это имеет какое-то отношение к размеру пакета с вашего доски на устройство. Надеюсь, кто-то, у кого больше опыта, может перезвонить. Может, сборщик мусора запишет ваш цикл? – Petro

ответ

0

OK. На самом деле это была проблема с доской. Я разработал клиентское приложение для чтения данных потока из доски CSR, и я заметил, что для этого нужна специальная Bluetooth-антенна. Когда я подключил его, скорость улучшилась и задержки уменьшились.

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