【问题标题】:How to set Powered property of /org/bluez/hci0 using sd_bus_set_property?如何使用 sd_bus_set_property 设置 /org/bluez/hci0 的 Powered 属性?
【发布时间】:2022-08-16 11:21:29
【问题描述】:

最近我开始使用通过 D-BUS 公开的 API 开发蓝牙应用程序。经过一番研究,我选择使用 sd-bus 库与 D-Bus 进行通信。 这是我的代码:

#include <systemd/sd-bus.h>

sd_bus* bus_;
if (sd_bus_open_system(&bus_) < 0)
{
    throw std::runtime_error(\"sd_bus_open_system\");
}
sd_bus_error sd_error;
bool powered = true;
if (sd_bus_set_property(bus_,
    \"org.bluez\",
    \"/org/bluez/hci0\",
    \"org.bluez.Adapter1\",
    \"Powered\",
    &sd_error,
    \"b\", &powered) < 0)
{
    throw std::runtime_error(\"Bluetooth Power On\");
}

上面的代码抛出“Bluetooth Power On”,sd_bus_set_property 的返回值为 -22 (EINVAL)。我从sd_error 无法理解,但对于谁可能感兴趣,以下是详细信息:

name:0x7fffffffdce8 \"И\\277UUU\"
message:0x5555555d6fbd <handler::handler(std::span<door, 18446744073709551615ul>)+191> \"\\220H\\213E\\350dH+\\004%(\"
_need_free:1439044320
  • 我已经使用 D-Feet 应用程序检查了文字字符串,一切似乎都是正确的。
  • 我尝试过以 root 或不使用 root 身份运行。
  • 我已尝试将用户添加到蓝牙组。

这段代码有什么问题?

source code of sd_bus_set_property 表明,它在内部调用 \"Set\" 从 \"org.freedesktop.DBus.Properties\"。我见过的大多数蓝牙示例都没有使用“sd_bus_set_property”,但我很想知道如何通过“sd_bus_set_property”来完成。

谢谢阅读。

    标签: dbus bluez


    【解决方案1】:

    我需要将我的用户添加到bluetooth 组:

    sudo usermode -aG bluetooth ${USER}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-16
      • 1970-01-01
      相关资源
      最近更新 更多