簡體   English   中英

如何使用 sd_bus_set_property 設置 /org/bluez/hci0 的 Powered 屬性?

[英]How to set Powered property of /org/bluez/hci0 using sd_bus_set_property?

最近我開始使用通過 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 運行。
  • 我已經嘗試將用戶添加到藍牙組。

這段代碼有什么問題?

sd_bus_set_property 的源代碼顯示,在內部,它從“org.freedesktop.DBus.Properties”調用“Set”。 我見過的大多數藍牙示例都沒有使用“sd_bus_set_property”,但我很想知道如何通過“sd_bus_set_property”來完成。

謝謝閱讀。

我從源代碼構建了 systemd 並進入了它的功能,並在某些時候看到它檢查錯誤,並且由於它不是 null,因此返回。

sd_bus_error sd_error = SD_BUS_ERROR_NULL;

解決了這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM