当前位置: 首页 > 面试题库 >

BlueZ:如何从命令行设置GATT服务器

徐德海
2023-03-14
问题内容

我想知道是否可以通过Linux命令行设置gatt服务器。我知道BlueZ
gatttool命令允许您充当gatt客户端并询问远程gatt服务器,但是,我认为该工具不能用于设置服务器。

我要实现的是一个 从命令行创建
的gatt服务器,可以被任何中央设备(例如iOS或Android设备)查询,以连接到GATT服务器,发现服务和特征,并操纵特征。

例:

具有1个服务的Gatt服务器,其中包含3个特征。

  • 服务uuid​​ = 0xFFFF
  • 字符1 uuid = 0xAAAA,值= 01,属性=可读
  • Char 2 uuid = 0xBBBB,值= 00,属性=可读可写
  • Char 3 uuid = 0xCCCC,值= 02,属性=可通知

我正在使用内核版本3.11.0和BlueZ 5.19


问题答案:

因此,现在可以使用新的 bluetoothctl 工具进行处理。可以使用此工具按以下方式设置gatt表:-

#bluetoothctl
[bluetoothctl] menu gatt
[bluetoothctl] register-service 0xFFFF # (Choose yes when asked if primary service)
[bluetoothctl] register-characteristic 0xAAAA read       # (Select a value of 1 when prompted)
[bluetoothctl] register-characteristic 0xBBBB read,write # (Select a value of 0 when prompted)
[bluetoothctl] register-characteristic 0xCCCC read       # (Select a value of 2 when prompted)
[bluetoothctl] register-application # (This commits the services/characteristics and registers the profile)
[bluetoothctl] back
[bluetoothctl] advertise on

我已经尝试了几种服务/功能组合,并且能够使其正常工作。默认情况下,GAP(0x1800)和GATT(0x1801)服务可用,并且在您做广告时将成为GATT表的一部分。您也可以使用以下命令查看可用的服务:

[bluetoothctl] show
Controller 00:AA:BB:CC:DD:EE (public)
    Name: MyMachine
    Alias: MyMachine
    Class: 0x000c0000
    Powered: yes
    Discoverable: no
    Pairable: yes
    UUID: Headset AG                (00001112-0000-1000-8000-00805f9b34fb)
    UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)
    UUID: A/V Remote Control        (0000110e-0000-1000-8000-00805f9b34fb)
    UUID: Generic Access Profile    (00001800-0000-1000-8000-00805f9b34fb)
    UUID: PnP Information           (00001200-0000-1000-8000-00805f9b34fb)
    UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb)
    UUID: Audhtml" target="_blank">io Source              (0000110a-0000-1000-8000-00805f9b34fb)
    UUID: Audio Sink                (0000110b-0000-1000-8000-00805f9b34fb)
    **UUID: Unknown                   (0000ffff-0000-1000-8000-00805f9b34fb)**
    UUID: Headset                   (00001108-0000-1000-8000-00805f9b34fb)
    Modalias: usb:v1D6Bp0246d0532
    Discovering: no


 类似资料:
  • 问题内容: 目标 我正在开发一个运行Linux的简单设备。它具有BLE功能,而我目前正在使用bluez 5.8。 我想使用iPhone在此设备上触发操作。 已经工作的内容: 我可以使iPhone“看到”该设备。 iPhone也连接到设备。 我在linux上设置了这样的蓝牙设备: iOS代码非常简单: 在iPhone上运行此代码时,出现以下日志: 因此,看来iPhone可以正常连接,但看不到任何服务

  • 问题内容: 有没有一种方法可以在没有用户/密码的情况下从命令行重设所有(或只是禁用安全性设置),因为我设法完全将自己锁定在外面? 问题答案: 最简单的解决方案是完全禁用安全-变化给在文件中。 然后只需重新启动詹金斯, 然后转到管理面板并再次设置所有内容。 如果您是从docker在k8s pod中运行Jenkins,这是我的情况,并且无法运行命令,那么您可以通过删除pod来重新启动Jenkins:

  • 有没有办法只获得一个Elasticsearch服务器的版本号。我知道您得到了JSON请求数据,但是否有方法解析该请求,只得到版本号。 curl localhost:9200

  • 问题内容: 是否有办法获取Elasticsearch服务器的版本号。我知道您获取了JSON请求数据,但是有一种解析该请求的方法仅获取版本号。 curl本地主机:9200 问题答案: 如果您拥有该实用程序,则可以使用它来解析json回复并输出纯文本字符串: 通用脚本语言可以完成相同的任务,但通常比较笨拙:

  • 我需要对https://sandbox.mediamind.com/Eyeblaster.MediaMind.API/V2/AuthenticationService.svc?wsdl进行SOAP webservice调用,并在传递参数时使用ClientLogin操作:Application ationKey、Password和UserName。响应是UserSecurityToken。它们都是弦

  • 问题内容: 我试图在Linux机器上使用GATT来设置具有许多特征的自定义服务。 使用[这个问题及其链接的问题,我能够识别出我需要编写的代码(利用该函数)。 我创建了一个单独的文件gatt_service.c,并编写了我认为需要的代码。但是,我无法解决如何将我的代码链接到Bluez库以编译和运行我的解决方案。例如,此站点(并非用于BLE开发)使用gcc参数链接到libbluetooth ,而我无法