BLE 温度計の間隔プロパティを設定しようとしていますが、いくつかの問題が発生しています。
NetworkManager の WimaxEnabled プロパティなどの設定プロパティをテストしました。
$ gdbus call --system --dest org.freedesktop.NetworkManager \
--object-path /org/freedesktop/NetworkManager \
--method org.freedesktop.DBus.Properties.Set \
"org.freedesktop.NetworkManager" "WimaxEnabled" "<boolean false>"
()
$ gdbus call --system --dest org.freedesktop.NetworkManager \
--object-path /org/freedesktop/NetworkManager \
--method org.freedesktop.DBus.Properties.Set \
"org.freedesktop.NetworkManager" "WimaxEnabled" "<boolean true>"
()
これらの機能が実際に広告どおりに機能することを確認できます。Interval のプロパティを設定しようとすると、奇妙なことが起こります。問題なくインターバルをクリアできる
$bgdbus call --system --dest org.bluez \
--object-path /org/bluez/hci0/dev_00_07_80_A6_3A_CA \
--method org.freedesktop.DBus.Properties.Set \
"org.bluez.Thermometer1" "Interval" "<uint16 0>"
()
ただし、間隔を他の値として設定しようとすると、エラーが発生します。私はすべての可能な uint16 値を試しましたが、同じ結果が得られました。
$ gdbus call --system --dest org.bluez \
--object-path /org/bluez/hci0/dev_00_07_80_A6_3A_CA \
--method org.freedesktop.DBus.Properties.Set \
"org.bluez.Thermometer1" "Interval" "<uint16 1>"
Error: GDBus.Error:org.bluez.Error.InvalidArguments: Invalid arguments in method call
(According to introspection data, you need to pass 'ssv')
Interval プロパティは読み取り/書き込みとして設定されます
$ gdbus introspect --system --dest org.bluez --object-path /org/bluez/hci0/dev_00_07_80_A6_3A_CA
node /org/bluez/hci0/dev_00_07_80_A6_3A_CA {
interface org.freedesktop.DBus.Introspectable {
methods:
Introspect(out s xml);
signals:
properties:
};
interface org.bluez.Device1 {
methods:
Disconnect();
Connect();
ConnectProfile(in s UUID);
DisconnectProfile(in s UUID);
Pair();
CancelPairing();
signals:
properties:
readonly s Address = '00:07:80:A6:3A:CA';
readonly s Name = 'test';
readwrite s Alias = 'test';
readonly u Class;
readonly q Appearance = 24585;
readonly s Icon;
readonly b Paired = true;
readwrite b Trusted = false;
readwrite b Blocked = false;
readonly b LegacyPairing = false;
readonly n RSSI;
readonly b Connected = true;
readonly as UUIDs = ['00001809-0000-1000-8000-00805f9b34fb'];
readonly s Modalias;
readonly o Adapter = '/org/bluez/hci0';
};
interface org.freedesktop.DBus.Properties {
methods:
Get(in s interface,
in s name,
out v value);
Set(in s interface,
in s name,
in v value);
GetAll(in s interface,
out a{sv} properties);
signals:
PropertiesChanged(s interface,
a{sv} changed_properties,
as invalidated_properties);
properties:
};
interface org.bluez.Thermometer1 {
methods:
signals:
properties:
readonly b Intermediate = false;
readwrite q Interval = 0;
readonly q Maximum = 0;
readonly q Minimum = 0;
};
};
これを行うための C プログラムも作成しましたが、まったく同じ結果が得られ、0 が機能し、他のすべての値が失敗します。これを前に見た人はいますか?何か提案はありますか?
編集:
必ず起こることですが、投稿後すぐに問題に気付きます。Minimum プロパティと Maximum プロパティは Interval の範囲だと思います。どちらも 0 に設定されているため、明らかに Interval プロパティを 0 以外に設定することはできません。