У меня проблема с задержкой при подключении к Bluetooth-аксессуару с помощью External Accessory Framework. При отправке данных я получаю следующий пользовательский вывод в консоли:
if( [stream hasSpaceAvailable] )
{
NSLog( @"Space avail" );
}
else {
NSLog(@"No space");
}
while( [stream hasSpaceAvailable] && ( [_outputBuffer length] > 0 ) )
{
/* write as many bytes as possible */
NSInteger written = [stream write:[_outputBuffer bytes] maxLength:[_outputBuffer length]];
NSLog( @"wrote %i out of %i bytes to the stream", written, [_outputBuffer length] );
if( written == -1 )
{
/* error, bad */
Log( @"Error writing bytes" );
break;
}
else if( written > 0 )
{
/* remove the bytes from the buffer that were written */
Log( @"erasing %i bytes", written );
[_outputBuffer replaceBytesInRange:NSMakeRange( 0, written ) withBytes:nil length:0 ];
}
}
Это приводит к следующему выводу, где буфером немедленной упаковки является полезная нагрузка.
immediate pack buffer-> 040040008
Space avail
wrote 10 out of 10 bytes to the stream
immediate pack buffer-> 040010005
No space
immediate pack buffer-> 030040007
No space
wrote 20 out of 20 bytes to the stream
immediate pack buffer-> 030010004
No space
immediate pack buffer-> 040000004
Space avail
wrote 20 out of 20 bytes to the stream
immediate pack buffer-> 030000003
Space avail
wrote 10 out of 10 bytes to the stream
immediate pack buffer-> 040040008
Space avail
wrote 10 out of 10 bytes to the stream
Обратите внимание, что на нем постоянно записывается «без пробела», что означает, что метод hasSpaceAvailable
возвращает false и вынуждает буферизовать данные до тех пор, пока он не вернет true.
1) Мне нужно знать, почему это происходит? Это ждет Ack от оборудования BT? Если да, то как вы снимаете эту блокировку?
2) Как вы делаете это, чтобы он отправлял немедленно, и мы в основном передаем данные в режиме реального времени без буферизации?
3) Есть ли скрытый метод API, который отключит эту блокировку?
Это реальная проблема, поскольку при отправке данных на устройство не может быть никаких задержек / задержек, их необходимо отправить немедленно, чтобы оборудование синхронизировалось с командами iPhone. Пожалуйста, помогите.