OneWheelWear app for Android Wear 2.0 watches
@dag0bert ack. Let me know if I can get any other info to help debug this.
I looked into @slashlibs past posts. I dunno if this might affect anything when it comes to wearables but the system info gives me info on the wear os, but also that its running android 8. My initial guess was the OS my phone is on, but... im on android 7 still.
Edit: To clarify slahslib has noted some issues with how android os 8 and the onewheel BT communicates
@drn3rd @slashlib Hi there. The watches I am currently developing with are android 7.1 watches. Probably, this malfunction has to do with the API level. I will have a look on available/affordable Android Oreo watches in order to get my hands on the issue. The OS version of the phone does not play a big role here, since the app is running standalone on the watch.
Wear OS 1.1
Build 8.0.0 OWDL.180126.012 dev-keys
@dag0bert the new version worked great! I've bought the full version now. Enjoy the beer money ;)
@joseph Thanks for the feedback and for purchasing the full version! I will enjoy the beer :)
@slashlib Thanks. This is also Android 8.0... interesting
Im no app dev, but I would assume google would supply some emulators, so that you dont have to go through the process of purchasing a new device everytime.
@drn3rd in theory you are right. There is emulators that are provided by Google. But the issue is, that emulators do not support the Bluetooth interface. So testing a Bluetooth-based application is rather painful. But I am on it. Watch will arrive later this week.
@dag0bert holy shit dude! wow. Talk about motivation.
OW community is hands down da best.
My XR is on the way too, so ill be able to help you test that out.
Today, the watch with Android 8.0 arrived. I ordered a Huawei Watch 2. Unfortunately, I was not able to find my OW+ board with the app running on this watch. Some research on the topic gave me a clue why this is:
OneWheel Boards (and many other devices) use a Bluetooth LE chip which is manufactured by Texas Instruments (TI). TI uses a flawed implementation of Bluetooth Low Energy (BLE) advertising. The BLE advertising packets generated by these TI chips do not conform with the BLE specification. Since the Android 8 Bluetooth implementation became more strict, these advertising packets generated by TI chips are getting ignored. The good thing about this is: It's not my fault :) The bad thing about this is, that I have no clue on how to fix this, yet.
Here are the details for this from the official TI Support Forum: https://e2e.ti.com/support/wireless_connectivity/bluetooth_low_energy/f/538/p/670467/2472298
I am not completely aware of how the offical OneWheel app is solving this issue. I guess the app carries over the board's device address from an earlier install, where the OS was still able to detect devices with malformed ADV packets. Some device manufacturers (including OnePlus) did obviously patch the AOSP implementation for this issue, as my phone is not having the issue despite running Oreo.
If you have ideas for a workaround, please do not hesitate to share them with me!
@dag0bert hey man. Sorry for our loss. lol
Edit: Maybe FM can shed some light on this? I doubt a support ticket might help, but hey who knows
Edit: if you go into the posts @slashlib has been active in, I believe he touches on this issue. There is some talk in some threads that users that have been upgraded to android 8.1 have this issue fixed... this is for phones tho
Edit: A mention on a work around https://android-review.googlesource.com/c/platform/system/bt/+/436295/
@drn3rd Thanks for the information!
Currently, I am thinking about adding the possibility to manually enter a Bluetooth device address for the case, that the board cannot be found by the respective watch. This would require the users to be aware of Bluetooth addresses and to be able to find out their board's Bluetooth address. What do you think?
@dag0bert Thats one workaround... Otherwise Found another source for the advertisement parser issue:
apparently allowing zero padding should help. Maybe you already tried it?
@drn3rd Hey! Thanks for researching this issue! Unfortunately, Android app programmers cannot simply allow zero padding in BLE advertisement packets. The page you found discusses code changes in the Android Open Source Project (AOSP), which is the basis for the Android operating system that is installed an various devices.
This means: As long as the device manufacturers are not providing an OS update for their devices that "allows zero-padding" in BLE advertising packets, there is nothing that app developers can do about it.
Sadly, most Android Wear devices are not getting updates as often as phones.
@dag0bert Alright. Gotcha. Android wear info is quite scarce too. Thanks for the gr8 info!
Hey again. I was thinking about your suggestion on the manual bluetooth address.
My initial reaction was, well what happens when people start updating to android oreo, but! You can always use your PC to search for bluetooth devices, alas giving you the address through that if you have an android oreo phone.
@dag0bert I sent a bug report to google, the ticket has been assigned to a developer.
GOOD NEWS EVERYONE!
Finally, I found a solution to the Oreo-Problem. Now, it is possible to manually specify the Bluetooth device address of your board manually.
I implemented a Address-Picker in the preference area of the app. Both version (free and paid) now have this new preference field.
All you have to figure out is how to get the Bluetooth Address of your OneWheel. Here is an app that helps you with this process: https://play.google.com/store/apps/details?id=com.macdom.ble.blescanner
Be aware that also your phone running the app could have trouble finding the board. This would be the case if it ran Android 8 and your device vendor did not yet implement a patch mitigating the issue. (OnePlus did patch this for my model)
I tested this new feature on a Huawei Watch 2 Sport running Android 8.0.
Please let me know what you think.