我使用 QDbus 实现了 org.bluez.Agent1 接口,我想设置一个固定引脚(我将提供给用户),以便验证所有配对请求并在引脚错误时拒绝它们。代理功能应该是“NoInputNoOutput”,因为该项目将部署在没有键盘或显示器的 RaspberryPi 3 上。有没有办法解决这个问题?谢谢
2 回答
对于固定密钥配对,您不应将该功能初始化为“NoInputOutput”。NoInputOutput 表示没有显示,并且此设备没有键盘/UI。在向 BlueZ 注册时为您的代理提及此功能意味着指示 BlueZ(蓝牙)不要调用任何代理 API 进行身份验证。
这通常对自动配对很有用,无需任何人工干预。您可以看到这个示例代码,它使用 NoInputOutput 功能连接设备,无需任何干预。
您需要的是“ DisplayOnly ”功能来指示 BlueZ根据您设备的 SSP 支持调用“ DisplayPinCode ”或“ DisplayPasskey ”。
您可以在您的代理中实施 DisplayPinCode/DisplayPasskey 以始终回复恒定的PIN。因此尝试连接的蓝牙设备可以使用相同的固定 PIN 码进行配对。
这里的 Display Pin /Passkey 只是命名约定或提示代理开发人员编写向导/UI 或任何形式的显示操作。但是您可以完全忽略显示操作,并回复静态/恒定6位密钥进行配对。
通常,当设备(iPhone/Android 手机/任何支持蓝牙的设备)尝试从设备端配对调用“ RequestPasskey ”或“ RequestPinCode ”时,Bluez(在 rasperry pi 中)调用此代理 API。
我们在一个项目中遇到了同样的问题,我转向 LE 设备,因为苹果设备只能出于“安全”原因连接到 LE 设备。
我对此没有太多参考,但如果这可以帮助您进行研究。