WARNING: Communications transmit queue full
STORE_ID: 00000000000000000000000000000000
What does it mean? When does such an error occur?
Is there a limitation on the data that can be transmitted via BLE to the companion app?
WARNING: Communications transmit queue full
STORE_ID: 00000000000000000000000000000000
There is a limit to the number of transmissions the communications backend can handle at one time. I believe the maximum active transfers on all the current wearable devices is 3, but this value is configurable per device. If you are seeing this warning printed in the error log, you should also have received a onError() callback in your ConnectionListener.
I am pretty sure this limitation only applies to transmissions from the device to the phone. As long as you don't transmit() more than 3 messages before you get onComplete() responses, I don't think you should see this warning in the log. You should also be getting onError() responses if you do, so if you catch those, you should be able to intelligently retry your transmissions.
I saw your posts about the large transmission times on messages, and I don't have any good ideas on that right now. I know there is some latency that we cannot control in the BLE protocol, but I don't think messages should be as slow as you are describing. I recall some internal development was seeing transmission times in the 1-2 second range, and our analysis indicated that at least 75% of the delay was not something we had control over. The data speeds are very slow, so if you are sending anything of significant size, you will see delays due to that (less than 1KB/second I believe). Another issue I have seen is that on iOS, apps that are in the background are given extremely low BLE priority. If your app is in the foreground on iOS you should see much less transmission delay than when it is running in the background. I think this should be less of an issue on Android, but I am not sure of any details.
We have someone looking into the message latency you've been seeing. We'll post back here once we know more. Thanks!
Well, there certainly are BT 3 devices, but for example Sony's SmartWatch 3 and Pebble watches are BT 4, and they still don't have that kind of lag, so it seems the reason lies elsewhere. I understand that Garmin focuses on other aspects of these devices, but I'd say having a faster BT communication with the watch is not too much to ask from a device of this price range.
Q: WHY DOESN'T PEBBLE USE BLUETOOTH 4.0 LE ON ANDROID?
A: Currently, Pebble only uses a Bluetooth "classic" connection on Android, and does not utilize Pebble's Bluetooth 4.0 LE (aka Bluetooth Smart) capability. In short, this is because there is no need to; and there are not enough benefits that outweigh the drawbacks.
LE stands for Low Energy, and this name is a frequent cause of enduser confusion. Many people incorrectly assume it will improve the battery life of their phones or watches, but that is not truly the case, nor it's purpose. The Low Energy name, refers specifically to devices like miniature fitness trackers, glucose monitors, sleep tracking bands, etc; with very tiny batteries (often under 80 mAh), and thus the devices themselves are low energy. Such devices previously would have had hard wired data connections only, Bluetooth 4.0 LE is designed to allow wireless capabilities for them. In order to achieve such low energy usage, 4.0 LE is designed to operate at much lower throughput (only 0.27 Mbit/s, versus up to 2.1 Mbit/s for "classic" Bluetooth). In short, it's intentionally much slower.
On iOS 7+ Pebble utilizes Bluetooth 4.0 LE, but only because it has to in order to use ANCS (Apple's centralized notification system in iOS 7+) over Bluetooth. This is a requirement Apple created. Bluetooth 4.0 LE's slow speeds make it unsuitable for the larger file transfers Pebble needs, for doing firmware updates and pushing apps and faces to the watch. So iOS 7+ has two simultaneous Bluetooth connections to Pebble. One Bluetooth 4.0 LE connection used solely for receiving notifications via ANCS. The other is a Bluetooth "classic" connection, used for phone call notifications, communication with third party apps/faces, firmware updates, and pushing apps and faces to the watch.
It's safe to assume that if Android gets 4.0 LE support for Pebble, there would also be two simultaneous Bluetooth connections to Pebble, which is not ideal. Doubling the number of connections has potential to half the reliability, and double the chances for problems, conflicts, etc. This has been shown to be a frequent cause of issues for iOS 7+ users. So while notifications via ANCS greatly improved the Pebble experience on iOS 7+, it came at the price of making it more technically complicated and prone to failure and issues.
Bluetooth 4.0 LE also offers little benefit to battery usage of the phone or watch. Pebble is already extremely battery efficient without LE, and Pebble's battery (130 mAh), is more than double the size of the sort of devices LE was designed for. As an example, even if LE saved 15% battery usage on Pebble - if you already get 5 days (120 hours) out of a watch charge - than that's only another 18 hours of usage. As far as energy usage on your phone, Bluetooth "classic" is only about a 10% battery usage. If LE managed to reduce that by even half to 5% - the difference to a phone which lasts 10 hours (600 minutes) on a charge, is only 30 extra minutes. Neither scenario are likely to change charging habits of either device or be a noticeable benefit.
Q: IOS 7+: MY PEBBLE IS LISTED TWICE IN BLUETOOTH SETTINGS, IS IT OK TO REMOVE THE ONE THAT ISN'T LE (LOW ENERGY)?
A: No. The Pebble uses both connections. Pebble uses the regular bluetooth connection for installing apps and firmware updates, transmitting phone call info and music controls. The Bluetooth LE (Low Energy) connection is used specifically for Notifications.
We're certainly focused on doing everything possible to improve performance, but there are limitations to the BLE protocol.
(I've shifted this discussion out of your app thread as requested.)
It is true that Pebble has BT 4.0 capabilities, and it is required to communicate with ANCS on iOS devices, but they do not use the BLE protocol for any other communications because the power savings is not significant to their device. I found this in their FAQ on reddit.
Our wearable devices unfortunately would not be able to use the Bluetooth 2.1 protocol without a significant impact on battery life as they have a much lower baseline power draw.
I was unable to find any information on the Sony device, but I suspect they use a similar approach to Pebble since they only run for 2 days on a 420mAh battery, which would mean BT 2.1 would effect them even less than the Pebble.
I guess the thing to try to look for is what protocol they actually use for transferring, but I was unable to find anything. 4.0 hardware is the standard and is required for ANCS, but the older BT 2.1 protocol can still be used on newer hardware. The Pebble has Bluetooth 4.0 hardware, but they use the 2.1 protocol for everything except ANCS because it is faster and they do not feel the increased power draw is significant to their platform. Given the power profile of the Sony device, I would guess they are doing the same since they would not gain any noticeable advantages from using the BLE profile to transfer data.