Как ускорить пропускную способность SPP в Xamarin Android?

#android #.net #xamarin #bluetooth #android-bluetooth

#Android #.net #xamarin #bluetooth #android-bluetooth

Вопрос:

Я пытаюсь заставить приложение Xamarin получать около 10 Кбит / с данных SPP через Bluetooth с нашей пользовательской печатной платы. Модуль BC127 на печатной плате может отправлять пакеты с максимальным размером 255 байт, поэтому приложение должно получать пакет каждые ~ 25 мс. Я использую пакеты для разделения данных, поэтому их нужно получать по одному за раз.

Тестовое приложение постоянно пытается получить данные, однако иногда, когда оно возвращается в начале метода приема, в потоке приема ожидают более 2 пакетов. Мой вопрос в том, что вызывает огромные задержки в моем методе приема Bluetooth? Я приложил метод ниже. После подключения к модулю Bluetooth приложение ничего не делает, кроме запуска этого метода в цикле while (true).

 public byte[] ReadBluetoothPacket()
    {
        int bytesAvailable = 0;
        while (bytesAvailable == 0)                                     // Wait for packet to arrive
        {
            bytesAvailable = stream.BaseInputStream.Available();        // Find out how big the packet is
        }
        byte[] result = new byte[bytesAvailable];
        _socket.InputStream.Read(result, 0, bytesAvailable);            // Add the bytes to the buffer
        return resu< 
    }
  

Ответ №1:

Я полагаю, что проблема была связана с тем, что ОС Android выполняла фоновые задачи, которые задерживали мой поток приема. Поскольку оказалось, что это только временная проблема, переписывание приемника данных для одновременной обработки нескольких пакетов решило ее.