完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在蓝牙扫描时,有的客户想对扫描到的蓝牙设备类型进行分类,并过滤出想要的设备。
蓝牙设备类型是怎么分类的? 用C代码怎么实现蓝牙设备分类的函数? 蓝牙设备类型也可以称为cod(class of device)。 Cod的结构如上图,一共有3个byte,其中一共分为4个部分。 主要分为: (1)Service class(服务类型) 描述此设备有什么功能?Networking?Audio?Telephony? (2)Major device class(设备的主类型) 这个是我们解析需要关注的重要部分,它是用来说描述蓝牙设备的一个大分类。 比如:Computer、Phone 、Audio/Video、Peripheral等等。 如果只是想了解到这个蓝牙设备的大致类型,解析到Major device class就可以了。 (3)Minor device class(设备的子类型) 对应于每种Major类型下面的子类,从这里更能清楚了解到这个设备。 比如 Audio/Video这个主类型,它还可以分为Wearable Headset Device、Hands-free Device、Headphones、Loudspeaker。 |
|
相关推荐
1个回答
|
|
解决办法
那么用代码应该怎么解析呢? 在Tina 平台上扫描到设备时是带有class信息的。比如bt_test扫描的结果如下: [bt]#scan 1 [bt]#63.778892: [bt_test_discovery_status_cb:80]: bt start scanning. 63.778957: [btmg_gap_bluez_callback:1204]: Discovery started 63.951689: [bt_test_dev_add_cb:104]: address:7C:2A:DB:F9:67:B7,name:Redmi 9,class:5898764,icon:phone,address type:public,rssi:-60 64.552549: [bt_test_dev_add_cb:104]: address:E0:DC:FF:E9:34:1E,name:flyBT,class:5898764,icon:phone,address type:public,rssi:-56 66.288756: [bt_test_dev_add_cb:104]: address:90:F0:52:69:2F:86,name:houxiaoni,class:5898764,icon:phone,address type:public,rssi:-76 66.303184: [bt_test_dev_add_cb:104]: address:00:19:86:00:03:C9,name:PCJIJIANJUN2,class:260,icon:computer,address type:public,rssi:-78 其实icon信息也能看出设备的主类型,这是bluez协议栈处理好的。 我们直接对class的值按照cod的规则进行解析即可,参考代码: 只解析主要设备类 const char *get_device_class_info(uint32_t device_class) { switch ((device_class & 0x1f00) >> 8) { case 0x01: return "computer"; case 0x02: return "phone"; case 0x03: return "network-wireless"; case 0x04: return "audio"; case 0x05: return "input-mouse"; case 0x06: return "printer"; break; } return NULL; } 解析到次要设备类 const char *get_device_class_info(uint32_t device_class) { switch ((device_class & 0x1f00) >> 8) { case 0x01: return "computer"; case 0x02: switch ((device_class & 0xfc) >> 2) { case 0x01: case 0x02: case 0x03: case 0x05: return "phone"; case 0x04: return "modem"; } break; case 0x03: return "network-wireless"; case 0x04: switch ((device_class & 0xfc) >> 2) { case 0x01: case 0x02: return "audio-Headset"; /* Headset */ case 0x06: return "audio-Headphone"; /* Headphone */ case 0x0b: /* VCR */ case 0x0c: /* Video Camera */ case 0x0d: /* Camcorder */ return "camera-video"; default: return "audio"; /* Other audio device */ } break; case 0x05: switch ((device_class & 0xc0) >> 6) { case 0x00: switch ((device_class & 0x1e) >> 2) { case 0x01: case 0x02: return "input-gaming"; } break; case 0x01: return "input-keyboard"; case 0x02: switch ((device_class & 0x1e) >> 2) { case 0x05: return "input-tablet"; default: return "input-mouse"; } } break; case 0x06: if (device_class & 0x80) return "printer"; if (device_class & 0x20) return "camera-photo"; break; } return NULL; } 代码中没有对所有子设备进行解析,如果以上没有涉及到,请参考蓝牙COD进行解析。 |
|
|
|
只有小组成员才能发言,加入小组>>
全志T113双核异构处理器的使用基于Tina Linux5.0——RTOS编译开发说明
512 浏览 0 评论
1120 浏览 1 评论
2951 浏览 0 评论
为了学习内核开发,大佬手搓了一个轻量级操作系统YiYiYa OS
2896 浏览 0 评论
1288 浏览 0 评论
【开源硬件大赛】基于全志V853设计的全功能BTB学习开发板
3450浏览 8评论
3105浏览 5评论
1876浏览 4评论
全志V85x硬件设计大赛作品精选第二期,快来Pick你心目中的最佳方案
88895浏览 3评论
3612浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 14:46 , Processed in 0.774675 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号