[英]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
這段代碼有什么問題?
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.