2017-02-01 78 views
2

現在、iOSでBLEアプリケーションを開発中です。 私のアプリケーションでは、BLEを使用して大きなデータを送信するためにセグメンテーションプロトコルを実装する必要があります。 私のアプリケーションは中央の役割を持つ必要があります。[iOS] [BLE] MTUをネゴシエートしよう

私の問題は、私が交渉MTUを得ることができないということです。私は私の周辺機器のmaximumWriteValueLengthを得ることができますが、それは私の中央オブジェクトのmaximumWriteValueLengthを見つけることができません。

私のCBCentralManagerの交渉MTUまたはCBCentralオブジェクトにアクセスする方法を知っている人がいましたか?

+0

iOSのmtuで何かできることは信じられません。それは20バイトに制限されています – Paulw11

+0

@ Paulw11私はあなたが正しいと思う私はiOS上でMTUと何もすることはできませんが、私は誰かがこの主題についてのアイデアを持っていることを願っています。あなたが私に限られていると言っている20バイトについては、私はあなたに同意していません。私は既にiOS BLEと150バイトのpaquetで作業しています。私の限界は155バイトを超えることはできません。しかし、iOSとAndroidで動作するこのアプリケーションでは、iOSとAndroidに同じ制限がないため、MTUを制限しない方法があります。 –

答えて

0

同じ問題を抱えている人にはお答えします。

今(2017年2月)周辺役割におけるiPhoneのMTUは常に158 それでは、私は(ちょうどいくつかのテストを行うために)短い溶液中で発見したことは158に中央MTUを比較し、小さい方を取ることです。 より安定した周辺機器は、接続後に読み取る特定の特性の中にMTUサイズを書き込みます。

3

iOSは接続時にMTU交換を自動的に開始します。 iOSの< 10は、iOSの10を実行している158 新しいデバイスのMTUサイズは、あなたがこれらのサイズをサポートするために接続されたデバイスを仮定すると、185

のMTUサイズを要求します、それは何である要求されます実行している

デバイス見なければならない。

CBCentralmaximumUpdateValueLengthプロパティを調べることによってネゴシエートされた最大ペイロードサイズを決定できるはずです。 (これは、ATTの通知/表示のオーバーヘッドであるため、ATT MTUより3バイト少なくなることに注意してください)

+0

私は完全に同意します。iPhoneがペリフェラルモードになっていると、 'CBCentral'の 'maximumUpdateValueLength'プロパティに3を加えて、交渉MTUを取得できます。しかし、私の質問は、iPhoneがセントラルモードのときでした... –

+0

私のipodが私のiPadの周辺機器(両方のiOS10)に接続されているとき、私は 'maximumUpdateValueLength'のために74を取得します。これらの値は、実際にはOSバージョンにも依存しますか? –

+0

@ハリKaram Singh - はい、通常、セントラルサイドはデフォルト値を要求し、ペリフェラル側は特定のBLE実装に応じて同意するか同意できません。 100%確実な固定MTUサイズを持つ特定の種類のペリフェラル/セントラルと通信するつもりでない限り、ハードコーディングされたMTU値を使用することは100%確実ではありません。 – JustAMartin

関連する問題