Re: BLE connection to device on iOS 7 only partially succeeds
After further investigation and a timely suggestion from CK at Apple, as well as a suggestion from EK here in this forum, I tried my command to the device with my app running on iOS 7 and found that if I changed the write option to CBCharacteristicWriteWithResponse from CBCharacteristicWriteWithoutResponse that the write to the characteristic does in fact occur and complete. Apparently Core Bluetooth on iOS 7 is being more stringent about operations on characteristics and the setting of the properties on those characteristics. I have to review the properties as they are set in the service in the firmware that implements the service. Regarding the "missing services", it also appears that Core Bluetooth on iOS 7 is not exposing the GAP and GATT services in the NSArray holding the discovered services in a CBPeripheral object - the apparent rationale is that these are services the client can do nothing with, and so there is no need to enumerate them. The fact that there were four services enumerated on iOS 6 and only two on iOS 7 is an artifact and of little consequence. Don On 8/22/13 7:50 PM, "bluetooth-dev-request@lists.apple.com" <bluetooth-dev-request@lists.apple.com> wrote:
Date: Thu, 22 Aug 2013 17:15:45 -0400 From: Don Clark <Don_Clark@onsetcomp.com> To: "bluetooth-dev@lists.apple.com" <bluetooth-dev@lists.apple.com> Subject: Re: Bluetooth-dev Digest, Vol 10, Issue 218 Message-ID: <CE3BF5C4.387F1%don_clark@onsetcomp.com> Content-Type: text/plain; charset=utf-8
I have not. On iOS 6 the notifications have been working well.
Since I wrote the first post I have noticed something. I'm asking the device for the services that the device provides, using the discoverServices method on the CBPeripheral object. When scanning from an iOS 6 device the BLE device is reporting four services, including GAP, GATT, Device Information Service and my custom service. I see this in my app, as well as in the Light Blue app. However, when running on iOS 7 both my app and Light Blue are reporting only two services, 0x180A and my own custom service. The GATT service, 0x1801, is critical – without that the accessing of a characteristic isn't going to happen. So I believe that Core Bluetooth isn't acting on my write request because that service appears to be missing.
So now the question is why Core Bluetooth isn't detecting the GATT and the GAP services? So it would seem that either there is an issue with Core Bluetooth on iOS 7, or maybe there has been some change that expects something different from the devices. Hopefully someone out there can shed some light on this.
Don
_______________________________________________ Do not post admin requests to the list. They will be ignored. Bluetooth-dev mailing list (Bluetooth-dev@lists.apple.com) Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/bluetooth-dev/site_archiver%40lists.... This email sent to site_archiver@lists.apple.com
participants (1)
-
Don Clark