QLowEnergyService Class
QLowEnergyService クラスは、Bluetooth Low Energy デバイス上の個々のサービスを表します。詳細...
| ヘッダー: | #include <QLowEnergyService> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Bluetooth) target_link_libraries(mytarget PRIVATE Qt6::Bluetooth) |
| qmake: | QT += bluetooth |
| 継承元: | QObject |
パブリック型
(since 6.2) enum | DiscoveryMode { FullDiscovery, SkipValueDiscovery } |
| enum | ServiceError { NoError, OperationError, CharacteristicReadError, CharacteristicWriteError, DescriptorReadError, …, UnknownError } |
| enum | ServiceState { InvalidService, RemoteService, RemoteServiceDiscovering, RemoteServiceDiscovered, LocalService, …, ServiceDiscovered } |
| enum | ServiceType { PrimaryService, IncludedService } |
| flags | ServiceTypes |
| enum | WriteMode { WriteWithResponse, WriteWithoutResponse, WriteSigned } |
パブリック関数
| virtual | ~QLowEnergyService() |
| QLowEnergyCharacteristic | characteristic(const QBluetoothUuid &uuid) const |
| QList<QLowEnergyCharacteristic> | characteristics() const |
| bool | contains(const QLowEnergyCharacteristic &characteristic) const |
| bool | contains(const QLowEnergyDescriptor &descriptor) const |
| void | discoverDetails(QLowEnergyService::DiscoveryMode mode = FullDiscovery) |
| QLowEnergyService::ServiceError | error() const |
| QList<QBluetoothUuid> | includedServices() const |
| void | readCharacteristic(const QLowEnergyCharacteristic &characteristic) |
| void | readDescriptor(const QLowEnergyDescriptor &descriptor) |
| QString | serviceName() const |
| QBluetoothUuid | serviceUuid() const |
| QLowEnergyService::ServiceState | state() const |
| QLowEnergyService::ServiceTypes | type() const |
| void | writeCharacteristic(const QLowEnergyCharacteristic &characteristic, const QByteArray &newValue, QLowEnergyService::WriteMode mode = WriteWithResponse) |
| void | writeDescriptor(const QLowEnergyDescriptor &descriptor, const QByteArray &newValue) |
シグナル
| void | characteristicChanged(const QLowEnergyCharacteristic &characteristic, const QByteArray &newValue) |
| void | characteristicRead(const QLowEnergyCharacteristic &characteristic, const QByteArray &value) |
| void | characteristicWritten(const QLowEnergyCharacteristic &characteristic, const QByteArray &newValue) |
| void | descriptorRead(const QLowEnergyDescriptor &descriptor, const QByteArray &value) |
| void | descriptorWritten(const QLowEnergyDescriptor &descriptor, const QByteArray &newValue) |
(since 6.2) void | errorOccurred(QLowEnergyService::ServiceError newError) |
| void | stateChanged(QLowEnergyService::ServiceState newState) |
詳細な説明
QLowEnergyServiceは、Bluetooth Low Energyサービスの詳細へのアクセスを提供します。このクラスは、サービス詳細の検出および公開を容易にし、含まれるデータの読み取りと書き込みを可能にし、データの変更を通知します。
サービスの構造
Bluetooth Low Energy 周辺機器は、複数のサービスを含むことができます。また、各サービスはさらに別のサービスを含む場合があります。このクラスは、周辺機器の単一のサービスを表し、QLowEnergyController::createServiceObject() によって作成されます。type() は、このサービスがプライマリ(最上位)サービスであるか、あるいは別のサービスの一部であるかを示します。 各サービスは1つ以上の特性を含み、各特性は記述子を含みます。その結果、構造は次の図のようになります:

特性は、主要な情報キャリアです。特性には、値へのアクセス権限を記述するvalue()とproperties()があります。含まれる記述子の一般的な目的は、特性の性質をさらに定義することです。例えば、値がどのように解釈されるべきか、あるいは値の変更を値の消費者へ通知できるかどうかを指定する場合があります。
サービス間の相互作用
サービスオブジェクトが初めて作成された時点では、その詳細情報はまだ特定されていません。これは、現在のstate()がDiscoveryRequired となっていることで示されます。この時点では、serviceUuid()とserviceName()のみを取得可能です。
そのオブジェクトに含まれるサービス、特性、および記述子の検出は、discoverDetails() を呼び出すことで開始されます。検出中、state() はDiscoveryRequired からDiscoveringService を経て、最終的なServiceDiscovered 状態へと遷移します。この遷移はstateChanged() シグナルを介して通知されます。詳細が判明すると、含まれるすべての特性、記述子、およびサービスが判明し、読み取りや書き込みが可能になります。
特性および記述子の値は、それぞれQLowEnergyCharacteristic およびQLowEnergyDescriptor を介して取得できます。ただし、これらの属性を直接読み書きするには、サービスオブジェクトが必要です。readCharacteristic()関数は、特性の値を再読み込みしようと試みます。初期のサービス検出で既に値が取得されていたとしても、通知が提供されないまま特性の値が絶えず変化する場合などには、この呼び出しが必要になることがあります。 例としては、連続的な値を提供する時間特性などが挙げられます。読み取りが成功した場合、characteristicRead() シグナルが発信されます。値の読み取りに失敗すると、CharacteristicReadError がトリガーされます。writeCharacteristic() 関数は、指定された特性に新しい値を書き込もうとします。書き込みが成功した場合、characteristicWritten() シグナルが発信されます。 書き込みに失敗すると、CharacteristicWriteError がトリガーされます。ディスクリプタの読み取りと書き込みは、同様のパターンに従います。
ハードウェア上のデскриプタや特性の値の読み書きは、あらゆる試みがなされます。これは、読み書きの際、QLowEnergyCharacteristic::properties() などのメタ情報が一般的に無視されることを意味します。例えば、メタデータの記述に基づいて特性が読み取り専用であるにもかかわらず、writeCharacteristic() を呼び出すことが可能です。 その結果として生成された書き込み要求は、接続されたデバイスに転送され、潜在的に無効な要求に対してどのように応答するかはデバイス次第となります。この場合、返されたデバイスエラーへの応答として、CharacteristicWriteError が発行されます。この動作により、誤ったメタ情報を報告するデバイスとのやり取りが簡素化されます。リモートデバイスに要求を転送できなかった場合は、OperationError が設定されます。 考えられる原因の一つとして、書き込み対象の特性オブジェクトが現在のサービスに属していないことが挙げられます。要約すると、これら2種類のエラーにより、ローカルエラーとリモートエラーを迅速に区別することができます。
すべてのリクエストは、先入れ先出し(FIFO)の原則に基づいてシリアル化されます。たとえば、前の書き込みリクエストが完了する前に 2 番目の書き込みリクエストを発行した場合、最初の書き込みリクエストが完了するまで 2 番目のリクエストは遅延されます。
注:現在 、署名付き書き込みリクエストや信頼性確保型書き込みリクエストを送信することはできません。
場合によっては、周辺機器が値の更新を生成し、中央機器がそれを受信したいことがあります。特性がこのような通知をサポートするには、QLowEnergyCharacteristic::Notify またはQLowEnergyCharacteristic::Indicate プロパティと、QBluetoothUuid::DescriptorType::ClientCharacteristicConfiguration 型の記述子が必要です。これらの条件が満たされていれば、次のコード断片に示すように通知を有効にすることができます:
//PreCondition: service details already discovered
QLowEnergyCharacteristic batteryLevel = service->characteristic(
QBluetoothUuid::CharacteristicType::BatteryLevel);
if (!batteryLevel.isValid())
return;
QLowEnergyDescriptor notification = batteryLevel.descriptor(
QBluetoothUuid::DescriptorType::ClientCharacteristicConfiguration);
if (!notification.isValid())
return;
// establish hook into notifications
connect(service, SIGNAL(characteristicChanged(QLowEnergyCharacteristic,QByteArray)),
this, SLOT(characteristicChanged(QLowEnergyCharacteristic,QByteArray)));
// enable notification
service->writeDescriptor(notification, QByteArray::fromHex("0100"));
// disable notification
//service->writeDescriptor(notification, QByteArray::fromHex("0000"));
// wait until descriptorWritten() signal is emitted
// to confirm successful writeこの例は、値が変更されるたびにセントラルに更新情報を送信するバッテリー残量特性を示しています。通知は、characteristicChanged() 信号を介して提供されます。このメカニズムに関する詳細は、Bluetooth仕様書に記載されています。
サービスデータの共有
各 QLowEnergyService インスタンスは、その内部状態や情報を、同じサービスに属する他の QLowEnergyService インスタンスと共有します。あるインスタンスがサービスの詳細の検出を開始すると、残りのすべてのインスタンスが自動的にそれに追随します。したがって、以下のスニペットは常に正常に動作します:
QLowEnergyService *first, *second;
QLowEnergyController control(remoteDevice);
control.connectToDevice();
// waiting for connection
first = control.createServiceObject(QBluetoothUuid::ServiceClassUuid::BatteryService);
second = control.createServiceObject(QBluetoothUuid::ServiceClassUuid::BatteryService);
Q_ASSERT(first->state() == QLowEnergyService::RemoteService);
Q_ASSERT(first->state() == second->state());
first->discoverDetails();
Q_ASSERT(first->state() == QLowEnergyService::RemoteServiceDiscovering);
Q_ASSERT(first->state() == second->state());readCharacteristic()、readDescriptor()、writeCharacteristic()、writeDescriptor() への呼び出しや、関連するQLowEnergyController がデバイスから切断されたことによるサービスの無効化など、その他の操作も同様に共有されます。
QLowEnergyController 、QLowEnergyCharacteristic 、およびQLowEnergyDescriptorも参照してください 。
メンバータイプのドキュメント
[since 6.2] enum QLowEnergyService::DiscoveryMode
この列挙型は、サービス検出モードを一覧表示します。すべてのモードにおいて、サービスの特性およびその特性の記述子が検出されます。各モードの違いは、特性値と記述子が読み込まれるかどうかにあります。
| 定数 | 値 | 説明 |
|---|---|---|
QLowEnergyService::FullDiscovery | 0 | 完全なディスカバリでは、すべての特性がディスカバリされます。すべての特性値および記述子が読み取られます。 |
QLowEnergyService::SkipValueDiscovery | 1 | 最小限の検出では、すべての特性が検出されます。特性値および記述子は読み取られません。 |
この列挙型は Qt 6.2 で導入されました。
discoverDetails()も参照してください 。
enum QLowEnergyService::ServiceError
この列挙型は、サービスの存続期間中に発生しうるすべてのエラー状態を表します。error() 関数は、最後に発生したエラーを返します。
| 定数 | 値 | 説明 |
|---|---|---|
QLowEnergyService::NoError | 0 | エラーは発生していません。 |
QLowEnergyService::OperationError | 1 | サービスが準備完了状態でない間に操作が試みられました。例としては、サービスがまだServiceDiscovered state ()の状態にない間に書き込みを試みた場合や、周辺機器との接続が失われたためにサービスが無効になっている場合などが挙げられます。 |
QLowEnergyService::CharacteristicReadError (since Qt 5.5) | 5 | 特性値の読み取りに失敗しました。たとえば、readCharacteristic() の呼び出しに応じてこのエラーが発生する場合があります。 |
QLowEnergyService::CharacteristicWriteError | 2 | 特性への新しい値の書き込みに失敗しました。たとえば、読み取り専用の特性への書き込みを試みた際に発生することがあります。 |
QLowEnergyService::DescriptorReadError (since Qt 5.5) | 6 | 記述子の値の読み取りに失敗しました。たとえば、readDescriptor() の呼び出しに応じてトリガーされる場合があります。 |
QLowEnergyService::DescriptorWriteError | 3 | 記述子への新しい値の書き込みに失敗しました。たとえば、読み取り専用の記述子への書き込みを試みたときに、このエラーが発生することがあります。 |
QLowEnergyService::UnknownError (since Qt 5.5) | 4 | サービスとのやり取り中に未知のエラーが発生しました。 |
enum QLowEnergyService::ServiceState
この列挙型は、サービスオブジェクトのstate()を記述するものです。
| 定数 | 値 | 説明 |
|---|---|---|
QLowEnergyService::InvalidService | 0 | サービスは、基盤となるデバイスとの接続が失われると無効になることがあります。接続が失われた場合でも、その最後の情報は保持されます。無効になったサービスは、デバイスへの接続が再確立されたとしても、再び有効になることはありません。 |
QLowEnergyService::RemoteService | 1 | サービスの詳細は、discoverDetails() を呼び出すことで取得する必要があります。信頼できる情報は、serviceUuid() およびserviceName() のみです。 |
QLowEnergyService::RemoteServiceDiscovering | 2 | サービスの詳細が検出中です。 |
QLowEnergyService::RemoteServiceDiscovered | 3 | サービスの詳細が検出されました。 |
QLowEnergyService::LocalService (since Qt 5.7) | 4 | このサービスは、peripheral role 内のコントローラーオブジェクトに関連付けられています。このようなサービスオブジェクトは、その状態を変更することはありません。 |
QLowEnergyService::DiscoveryRequired | RemoteService | 非推奨。RemoteService に名前が変更されました。 |
QLowEnergyService::DiscoveringService | RemoteServiceDiscovering | 非推奨。RemoteServiceDiscovering に名前が変更されました。 |
QLowEnergyService::ServiceDiscovered | RemoteServiceDiscovered | 非推奨。RemoteServiceDiscovered に名称が変更されました。 |
enum QLowEnergyService::ServiceType
flags QLowEnergyService::ServiceTypes
この列挙型は、サービスの種類を表します。
| 定数 | 値 | 説明 |
|---|---|---|
QLowEnergyService::PrimaryService | 0x0001 | このサービスは、最上位/プライマリ・サービスです。このタイプ・フラグが設定されていない場合、そのサービスはセカンダリ・サービスとみなされます。各サービスは、IncludedService で示される別のサービスに含まれることがあります。 |
QLowEnergyService::IncludedService | 0x0002 | このサービスは、別のサービスに含まれています。一部のプラットフォームでは、現在のサービスを含むサービスが検出されるまで、このフラグを判定できません。 |
ServiceTypes 型は、QFlags<ServiceType> の typedef です。これは、ServiceType 値の OR 結合を格納します。
enum QLowEnergyService::WriteMode
この列挙型は、特性値を書き込む際に使用するモードを表します。特性は、properties を通じて、サポートされている書き込みモードを公開します。
| 定数 | 値 | 説明 |
|---|---|---|
QLowEnergyService::WriteWithResponse | 0 | このモードを使用して特性に書き込みを行う場合、周辺機器は書き込み確認を送信しなければなりません。操作が成功した場合、確認はcharacteristicWritten()シグナルを介して送信されます。それ以外の場合は、CharacteristicWriteError が送信されます。この書き込みモードをサポートするには、特性のQLowEnergyCharacteristic::Write プロパティが設定されている必要があります。 |
QLowEnergyService::WriteWithoutResponse | 1 | このモードを使用して特性に書き込みを行う場合、リモート周辺機器は書き込み確認を送信してはならない。操作の成否は判定できず、ペイロードの長さは20バイトを超えてはならない。この書き込みモードをサポートするには、特性のQLowEnergyCharacteristic::WriteNoResponse プロパティが設定されている必要がある。このモードの利点は、他のデバイスとのやり取りの合間に書き込み操作を実行できるため、書き込み処理が高速になることである。 |
QLowEnergyService::WriteSigned (since Qt 5.7) | 2 | このモードを使用して特性に書き込みを行う場合、リモート周辺機器は書き込み確認を送信してはならない。操作の成否は判定できず、ペイロードの長さは8バイトを超えてはならない。 2つのデバイス間にボンディングが存在している必要があり、リンクは暗号化されてはならない。この書き込みモードをサポートするには、特性のQLowEnergyCharacteristic::WriteSigned プロパティが設定されている必要がある。この値は現在、AndroidおよびBlueZ 5を搭載し、カーネルバージョン3.7以降のLinuxでのみサポートされている。 |
メンバ関数のドキュメント
[virtual noexcept] QLowEnergyService::~QLowEnergyService()
QLowEnergyService インスタンスを破棄します。
QLowEnergyCharacteristic QLowEnergyService::characteristic(const QBluetoothUuid &uuid) const
uuid に一致する特性を返します。一致しない場合は、無効な特性を返します。
このサービスインスタンスのdiscoverDetails()がまだ呼び出されていない場合、または一致するuuid を持つ特性が存在しない場合、返される特性は無効となります。
characteristics()も参照してください 。
[signal] void QLowEnergyService::characteristicChanged(const QLowEnergyCharacteristic &characteristic, const QByteArray &newValue)
関連するコントローラオブジェクトが「central 」ロールにある場合、このシグナルは、周辺機器/デバイス側のイベントによってcharacteristic の値が変更されたときに発信されます。その場合、このシグナルの発信は、周辺機器での変更イベントに先立ち、その特性のClientCharacteristicConfiguration 記述子を通じて変更通知が有効化されていたことを意味します。 その具体的な方法については、above を参照してください。
コントローラが「peripheral 」ロール、つまりQLowEnergyController::addService を通じてサービスオブジェクトが作成されている場合、GATT クライアントが書き込み要求またはコマンドを使用して特性の値を書き込んだときにシグナルが発信されます。
newValue パラメータには、characteristic の更新後の値が含まれます。
[signal] void QLowEnergyService::characteristicRead(const QLowEnergyCharacteristic &characteristic, const QByteArray &value)
このシグナルは、characteristic に対する読み取り要求が、value を正常に返した際に発火します。このシグナルは、characteristicRead() を呼び出すことでトリガーされる場合があります。読み取り操作が成功しなかった場合、CharacteristicReadError フラグを使用して、errorOccurred() シグナルが発火します。
注:この シグナルは 、Central Role に関連するユースケースでのみ発火します。
readCharacteristic()も参照してください 。
[signal] void QLowEnergyService::characteristicWritten(const QLowEnergyCharacteristic &characteristic, const QByteArray &newValue)
このシグナルは、characteristic の値がnewValue に正常に変更された際に発火します。この変更は、writeCharacteristic()の呼び出しによって引き起こされている必要があります。書き込み操作が成功しなかった場合、CharacteristicWriteError フラグを使用してerrorOccurred()シグナルが発火します。
書き込み信号の受信は、ターゲットデバイスが書き込み対象の値を受信し、書き込み要求のステータスを報告したことを示すものと見なすことができます。
注: WriteWithoutResponse モードを使用してwriteCharacteristic()が呼び出された場合 、このシグナルおよびerrorOccurred()は決して発信されません。
注:この シグナルは 、Central Role に関連するユースケースでのみ発せられます。
writeCharacteristic()も参照してください 。
QList<QLowEnergyCharacteristic> QLowEnergyService::characteristics() const
このQLowEnergyService インスタンスに関連付けられているすべての特性を返します。
このサービスインスタンスの `discoverDetails()` がまだ呼び出されていない場合、または既知の特性が存在しない場合、返されるリストは空になります。
characteristic()、state()、およびdiscoverDetails()も参照してください 。
bool QLowEnergyService::contains(const QLowEnergyCharacteristic &characteristic) const
characteristic がこのサービスに属している場合はtrue を返し、そうでない場合はfalse を返します。
characteristics() にcharacteristic が含まれている場合、その特性は当該サービスに属します。
bool QLowEnergyService::contains(const QLowEnergyDescriptor &descriptor) const
descriptor がこのサービスに属している場合はtrue を返し、そうでない場合はfalse を返します。
[signal] void QLowEnergyService::descriptorRead(const QLowEnergyDescriptor &descriptor, const QByteArray &value)
このシグナルは、descriptor に対する読み取り要求が、value を正常に返した際に発せられます。このシグナルは、descriptorRead() を呼び出すことでトリガーされる場合があります。読み取り操作が失敗した場合は、DescriptorReadError フラグを使用して、errorOccurred() シグナルが発せられます。
注:この シグナルは、Central Roleに関連するユースケースでのみ発火します。
readDescriptor()も参照してください 。
[signal] void QLowEnergyService::descriptorWritten(const QLowEnergyDescriptor &descriptor, const QByteArray &newValue)
このシグナルは、descriptor の値がnewValue に正常に変更されたときに発せられます。関連するコントローラオブジェクトがcentral の役割にある場合、この変更はwriteDescriptor()の呼び出しによって引き起こされたものでなければなりません。それ以外の場合は、このシグナルは、GATTクライアントから当該ディスクリプタに対する書き込み要求またはコマンドの結果として発生します。
writeDescriptor()も参照してください 。
void QLowEnergyService::discoverDetails(QLowEnergyService::DiscoveryMode mode = FullDiscovery)
このサービスに含まれるサービス、特性、およびそれらに関連付けられた記述子の検出を開始します。
ディスカバリ処理は、stateChanged()シグナルによって示されます。作成後、サービスはDiscoveryRequired 状態になります。discoverDetails()を呼び出すと、DiscoveringService 状態に移行します。詳細ディスカバリが完了すると、ServiceDiscovered 状態に移行します。各遷移時に、stateChanged()シグナルが発行されます。引数mode に応じて、FullDiscovery またはSkipValueDiscovery が実行されます。いずれの場合も、すべてのサービスと特性がディスカバリされます。FullDiscovery では、すべての特性値と記述子が読み込まれます。SkipValueDiscovery では、特性値と記述子は読み込まれません。SkipValueDiscovery には2つの利点があります。第一に、処理が高速です。 第二に、特性や記述子を誤って「読み取り可能」と広告しているにもかかわらず、実際には読み取りを許可していない一部のデバイスにおけるバグを回避できます。これは予期しない動作を引き起こす可能性があります。SkipValueDiscovery の後は、readCharacteristic() /readDescriptor()を呼び出し、これらが正常に完了するのを待ってから、特性や記述子の値にアクセスする必要があります。
引数mode はQt 6.2で導入されました。
state()も参照してください 。
QLowEnergyService::ServiceError QLowEnergyService::error() const
最後に発生したエラー、またはNoError を返します。
[signal, since 6.2] void QLowEnergyService::errorOccurred(QLowEnergyService::ServiceError newError)
このシグナルは、エラーが発生した際に発火します。newError パラメータは、発生したエラーの詳細を記述します。
この関数はQt 6.2で導入されました。
QList<QBluetoothUuid> QLowEnergyService::includedServices() const
現在のサービスに含まれるすべてのサービスのUUIDを返します。
このサービスインスタンスのdiscoverDetails()がまだ呼び出されていない場合、または既知の特性が存在しない場合、返されるリストは空になります。
包含されたサービスがさらに別のサービスを含んでいる可能性があります。このような第2レベルの包含は、関連する第1レベルのQLowEnergyService インスタンスを介して取得する必要があります。技術的には、これにより循環依存関係が生じる可能性があります。
QLowEnergyController::createServiceObject各UUIDに対応するサービスインスタンスを取得するには、`xml-ph-0000@deepl.internal()` を使用する必要があります。
createServiceObject()も参照してください 。
void QLowEnergyService::readCharacteristic(const QLowEnergyCharacteristic &characteristic)
characteristic の値を読み取ります。操作が成功した場合は、characteristicRead()シグナルが出力され、失敗した場合はCharacteristicReadError が設定されます。一般的に、characteristic は、そのQLowEnergyCharacteristic::Read プロパティが設定されている場合に読み取り可能です。
同じリモートデバイスに対するすべてのデскриプタおよび特性のリクエストはシリアライズされる。複数のリクエストを同時に発行する際にはキューが使用される。このキューは、同じ特性に対する重複した読み取りリクエストを排除するものではない。
特性は、サービスがServiceDiscovered 状態であり、かつそのサービスに属している場合にのみ読み取ることができます。これらの条件のいずれかが満たされない場合、QLowEnergyService::OperationError が設定されます。
注: QLowEnergyCharacteristic::properties() がプロパティが読み取り不可であると報告しているにもかかわらず、この関数を呼び出すと 、常にハードウェア上でその特性の値の読み取りが試みられます。ハードウェアからエラーが返された場合、CharacteristicReadError が設定されます。
関連項目: characteristicRead() およびwriteCharacteristic()。
void QLowEnergyService::readDescriptor(const QLowEnergyDescriptor &descriptor)
descriptor の値を読み取ります。操作が成功した場合は、descriptorRead()シグナルが発信され、失敗した場合はDescriptorReadError が設定されます。
同じリモートデバイスに対するすべてのディスクリプタおよび特性のリクエストは、シリアル化されます。複数のリクエストを同時に発行する際には、キューが使用されます。このキューは、同じディスクリプタに対する重複した読み取りリクエストを排除するものではありません。
ディスクリプタは、サービスがServiceDiscovered 状態であり、かつそのディスクリプタが当該サービスに属している場合にのみ読み取ることができます。これらの条件のいずれかが満たされない場合、QLowEnergyService::OperationError が設定されます。
descriptorRead() およびwriteDescriptor()も参照してください 。
QString QLowEnergyService::serviceName() const
サービスの名前を返します。それ以外の場合は空の文字列を返します。
serviceUuid()が既知の UUID である場合にのみ、返される名前を取得できます。
QBluetoothUuid QLowEnergyService::serviceUuid() const
サービスのUUIDを返します。そうでない場合は、nullのUUIDを返します。
QLowEnergyService::ServiceState QLowEnergyService::state() const
サービスの現在の状態を返します。
デバイスのサービスが初めてインスタンス化された場合、オブジェクトの状態はDiscoveryRequired となります。周辺デバイス上の同じサービスを指すすべてのサービスオブジェクトの状態は、常に同一です。これは、内部オブジェクトデータが共有されているためです。したがって、最初のインスタンス以降に作成されるサービスオブジェクトのインスタンスは、すべて既存のインスタンスと同じ状態になります。
QLowEnergyController がリモートデバイスから切断されると、サービスは無効になります。 無効なサービスは、切断イベント発生時の内部状態を維持します。これは、サービスの詳細が一度検出されれば、無効なサービスからでもその詳細を取得できることを意味します。これにより、デバイス接続を確立し、サービスの詳細を取得した後、次のデバイスが周辺機器に接続できるよう、直ちにデバイスを切断するといったシナリオが可能になります。
ただし、通常は、サービスやその詳細情報の繰り返し検出を避けるため、接続を維持する必要があります。検出には時間がかかる場合があり、クライアントは継続的な変更通知を購読することができます。
stateChanged()も参照してください 。
[signal] void QLowEnergyService::stateChanged(QLowEnergyService::ServiceState newState)
このシグナルは、サービスの状態が変化した際に発火します。newState は、state() を通じて取得することもできます。
state()も参照してください 。
QLowEnergyService::ServiceTypes QLowEnergyService::type() const
サービスのタイプを返します。
注: サービスが「ServiceDiscovered 」状態に達するまでは、type属性は 信頼できません。このフィールドは、PrimaryService で初期化されます。
注: Androidでは 、サービスがプライマリサービスかセカンダリサービスかを判別することはできません。そのため、すべてのサービスに `PrimaryService ` フラグが設定されています。
void QLowEnergyService::writeCharacteristic(const QLowEnergyCharacteristic &characteristic, const QByteArray &newValue, QLowEnergyService::WriteMode mode = WriteWithResponse)
characteristic の値としてnewValue を書き込みます。具体的な動作は、関連付けられたコントローラーオブジェクトがどのロールにあるかによって異なります。
中央ロール
この呼び出しにより、リモート周辺機器への書き込み要求またはコマンドが発行されます。操作が成功した場合は、characteristicWritten() シグナルが発信されます。失敗した場合は、CharacteristicWriteError が設定されます。この関数を呼び出しても、現在の書き込み要求後に周辺機器自体が値を再度変更しない限り、characteristicChanged() シグナルはトリガーされません。
mode パラメータは、リモートデバイスが書き込み確認を送信するかどうかを決定します。書き込み対象のcharacteristic は、関連する書き込みモードをサポートしている必要があります。特性がサポートする書き込みモードは、そのQLowEnergyCharacteristic::Write およびQLowEnergyCharacteristic::WriteNoResponse プロパティによって示されます。
同じリモートデバイスに対するすべての記述子および特性の書き込み要求は、シリアル化されます。複数の書き込み要求を同時に発行する場合、キューが使用されます。このキューは、同じ特性に対する重複した書き込み要求を排除するものではありません。たとえば、同じ記述子が値 A に設定され、その直後に値 B に設定された場合、2 つの書き込み要求は指定された順序で実行されます。
注:現在 、Bluetooth仕様で定義されている署名付き書き込みや信頼性のある書き込みを使用することはできません。
特性への書き込みは、このサービスがServiceDiscovered 状態であり、かつその特性が当該サービスに属している場合にのみ可能です。これらの条件のいずれかが満たされない場合、QLowEnergyService::OperationError が設定されます。
注: QLowEnergyCharacteristic::properties() が書き込み不可のプロパティを報告しているにもかかわらず、この関数を呼び出すと 、常にハードウェアへの書き込みが試みられます。同様に、その特性がWriteWithResponse のみをサポートしている場合でも、WriteWithoutResponse がハードウェアに送信されます。ハードウェアがエラーを返した場合、CharacteristicWriteError が設定されます。
周辺機器の役割
この呼び出しにより、ローカルデータベース内の特性の値が更新されます。
クライアントが現在接続されており、そのクライアントが当該特性に対する通知またはインジケーションを有効にしている場合、対応する情報が送信されます。デバイスが当該特性に対する通知またはインジケーションを有効にしており、そのデバイスが現在接続されていないものの、そのデバイスとローカルデバイスとの間にボンディングが存在する場合、次の再接続時に通知またはインジケーションが送信されます。
特性値の長さに制約があり、newValue がその制約を満たしていない場合、動作は未定義となります。
注: ペリフェラルモードでは、mode 引数は 無視されます。
QLowEnergyService::characteristicWritten() およびQLowEnergyService::readCharacteristic()も参照してください 。
void QLowEnergyService::writeDescriptor(const QLowEnergyDescriptor &descriptor, const QByteArray &newValue)
`descriptor` の値として `newValue ` を書き込みます。正確な意味は、関連付けられたコントローラーオブジェクトが担う役割によって異なります。
中央ロール
この関数を呼び出すと、リモートデバイスへの書き込み要求が行われます。操作が成功した場合はdescriptorWritten() シグナルが発行され、失敗した場合はDescriptorWriteError が発行されます。
同じリモートデバイスに対するすべてのディスクリプタおよび特性へのリクエストはシリアル化されます。複数の書き込みリクエストを同時に発行する際には、キューが使用されます。このキューは、同じディスクリプタに対する重複した書き込みリクエストを排除するものではありません。例えば、同じディスクリプタが値 A に設定され、その直後に値 B に設定された場合、2 つの書き込みリクエストは指定された順序で実行されます。
デскриプタへの書き込みは、このサービスがServiceDiscovered 状態であり、かつそのサービスに属している場合にのみ可能である。これらの条件のいずれかが満たされない場合、QLowEnergyService::OperationError が設定される。
周辺機器の役割
値はローカルサービスデータベースに書き込まれます。newValue の内容がdescriptor に対して無効な場合、動作は未定義となります。
descriptorWritten() およびreadDescriptor()も参照してください 。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.