几个月后,我拥有了菲利普斯公司的电动牙刷,名为Sonicare HX992B。它使用蓝牙连接到移动应用程序,告诉你刷牙有多好,实时显示方向,还会通知你何时更换新刷子。
我很好奇这到底是怎么回事。因为这个应用程序使用蓝牙低能耗(BLE),所以我使用了Android版的NRF Connect应用程序来获取广告服务的列表。
现在,我有一个包含12个BLE服务的列表,其中只有4个是BluTooth.com上描述的标准服务。除了诸如通用访问、通用属性、设备信息和电池服务等众所周知的服务之外,还存在由制造商创建的八个自定义服务。前七个服务UUID中的每一个都以477ea600-a260-11e4-ae37-0002a5d5000开头,以1到8之间的数字结尾,缺少数字3。另外八个服务的前缀与其他服务完全不同。
通过打开和关闭设备,改变强度和模式,以及来回更换笔刷,我能够识别出这六项服务的一些特征。通过使用jadx对Android应用程序的代码进行反向工程,我找到了有关会话、存储和许多其他内容的信息。
请求会话(写入会话ID,写入0x00到4110,获取此处和4100的数据通知)。
据应用程序消息人士透露,最后一项未知服务名为“Moonsun Streaming”,用于更新固件。我同意不要碰这个,因为我可能会损坏固件,需要再次用手刷牙。
由于我可以在清洁过程中在应用程序中看到非常明显的课程方向,所以我希望在特征中的某个地方显示方向数据。我在服务5中找到了它们。一旦您启用了4130服务的通知,您就会得到字节数组的数据流。事实证明,这些确实是陀螺仪的价值所在。
我创建了一个python库来与Python中的牙刷交互。请随意尝试,找出缺失服务的含义并提交拉取请求:https://github.com/joushx/python-sonicare