RN42 Bluetooth отключается на iOS в течение нескольких секунд после потоковой передачи данных

пытался прочитать данные с устройства через Bluetooth 2.1, используя RN-42. Устройство подключается к iPhone или iPad Mini, и данные передаются в течение короткого времени, но iOS и Модуль BT отключается (не соединяется) в течение секунд (менее 10). Устройство выводит данные 5-10 кБ / с, поэтому в пределах Bluetoothспец. То, что яМы также заметили, что когда я запускаю функцию NSInputStream, [NSInputStream read: maxLength:], количество возвращаемых байтов всегда равно 158 или меньше. Приложение и оборудование несбой, но Bluetooth просто отключается.

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

Вещи, которые ямы пытались ...

последовал примеру внешнего аксессуара EADemo, предоставленного Apple.просто используя цикл выполнения вместо опроса.поместить поток в фоновую ветку, как это предлагается в этом посте.удаление всех NSLogs, чтобы помочь с производительностью.скомпилирован в режимах отладки и выпуска.

Единственное, что работает, - это замедление передачи данных (т. Е. Менее 5 кБ / с), так как это позволяет модулям iOS и BT оставаться на связи и дольше передавать данные перед отключением.

#define EAD_INPUT_BUFFER_SIZE 1024

/**
 * Stream delegate
 */
- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode
{
    switch (eventCode) {
[... other cases ...]

        case NSStreamEventHasBytesAvailable:
        {            
            uint8_t buf[EAD_INPUT_BUFFER_SIZE];
            unsigned int len = 0;
            len = [(NSInputStream *)aStream read:buf maxLength:EAD_INPUT_BUFFER_SIZE];

            if(len) {
                // Read successful, process data
            } else {
                // Fail
            }     
            break;
        }
        default:
            break;
    }
}

/**
 * Stream delegate with polling (for better or worse)
 */
    [...]
        case NSStreamEventHasBytesAvailable:
        {            
            while ([[_session inputStream] hasBytesAvailable])
            {
                // Read the data
                NSInteger bytesRead = [[_session inputStream] read:_buf maxLength:EAD_INPUT_BUFFER_SIZE];

                if (bytesRead > 0) {
                    // Read successful, process data

                } else if (bytesRead == 0) {
                    // End of buffer reached
                    return;

                } else if (bytesRead == -1) {
                    // Failed to read
                    return;
                }
            }
            break;
    [...]

Ответы на вопрос(1)

Ваш ответ на вопрос