外部アクセサリフレームワークを使用してBluetoothアクセサリに接続するときに待ち時間に問題があります。NSOutputStreamでパケットをすぐに送信またはフラッシュする方法
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)私が知る必要があるのは、なぜ起こっているのですか? BTハードウェアからAckを待っていますか?もしそうなら、どうやってこのブロックを解除しますか?
2)どのようにしてすぐに送信し、基本的にはバッファリングせずにリアルタイムでデータをストリーミングするのですか?
3)このブロックを無効にする隠されたAPIメソッドはありますか?
これは実際の問題です。デバイスにデータを送信する際に遅延や待ち時間が発生しないため、ハードウェアがiPhoneコマンドと同期するためにはすぐに送信する必要があります。助けてください。