2017-02-01 4 views
2

현재 iOS에서 BLE 앱을 개발 중입니다. 내 응용 프로그램에서 BLE를 사용하여 큰 데이터를 보내려면 세그먼트 화 프로토콜을 구현해야합니다. 애플리케이션에 Central 역할이 있어야합니다.[iOS] [BLE] MTU 협상을 시작합니다.

제 문제는 협상 MTU를 얻을 수 없다는 것입니다. 내 주변 장치의 maximumWriteValueLength를 얻을 수 있지만 내 개체가 커서 내 중앙 개체의 maximumWriteValueLength를 찾을 수 없습니다.

협상 MTU를 찾는 방법이나 내 CBCentralManager의 CBCentral 개체에 액세스하는 방법을 아는 사람이 있습니까?

+0

iOS에서 mtu를 사용하여 아무 것도 할 수 없다고 생각합니다. 20 바이트로 제한됩니다. – Paulw11

+0

@ Paulw11 iOS에서 MTU로는 아무 것도 할 수 없다고 생각합니다.하지만 누군가이 주제에 대해 아이디어를 가지기를 바랍니다. 당신이 내가 제한적이라고 말하는 20 바이트에 관해, 나는 당신과 동의하지 않는다. 나는 이미 150 바이트의 iOS BLE과 paquet을 사용하고있다. 제한 사항은 155 바이트를 초과 할 수 없습니다. 하지만 iOS와 Android에서 작동하는이 애플리케이션의 경우 iOS와 Android에 동일한 제한이 없으므로 MTU를 제한하지 않을 방법을 찾았습니다. –

답변

0

같은 문제가있는 사람들에게 답변 해 드리겠습니다.

지금 당장 (2017 년 2 월) 주변기기 역할의 iPhone MTU는 항상 158입니다. 짧은 솔루션에서 발견 한 바는 중앙 MTU를 158로 비교하고 작은 MTU를 비교하는 것입니다. . 해결 방법보다 안정적인 주변 장치는 MTU 크기를 연결 후 읽을 특정 특성 안에 기록합니다.

3

iOS는 연결시 자동으로 MTU 교환을 시작합니다. 당신이 연결되어있는 장치를 가정하면 185

의 MTU 크기를 요청합니다 아이폰 OS 10을 실행하는 158 최신 장치의 MTU 크기를 요청합니다 아이폰 OS < 10을 실행하는

장치

그 무엇이며,이 크기를 지원하면 보아야합니다.

CBCentralmaximumUpdateValueLength 속성을보고 협상 한 최대 페이로드 크기를 결정할 수 있어야합니다. (ATT 알림/표시에 대한 오버 헤드이므로 ATT MTU보다 3 바이트 작음을 유의하십시오.)

+0

전적으로 동의합니다. iPhone이 주변기기 모드에있을 때 'CBCentral'의 'maximumUpdateValueLength'속성에 3을 추가하여 협상 MTU를 얻을 수 있습니다. 하지만 내 질문은 아이폰이 중앙 모드에있을 때 ... –

+0

내 ipod가 내 iPad (둘 다 iOS102)의 주변 장치로 연결되면 나는 'maximumUpdateValueLength'에 대해 74를 얻는다. 이 값들은 실제로 OS 버전과 OS 버전에 달려 있습니까? –

+0

@Hari Karam Singh - 예, 일반적으로 중앙 측은 BLE 구현에 따라 기본값을 묻고 주변 측은 동의하거나 동의하지 않을 수 있습니다. 따라서 절대 100 % 확신 할 수는 없으며 100 % 고정 MTU 크기로 알려진 특정 종류의 주변 장치/중앙 장치와 통신하려는 경우가 아니라면 하드 코딩 된 MTU 값을 사용하는 것은 좋지 않습니다. – JustAMartin