QLowEnergyService Class
QLowEnergyServiceクラスは、Bluetooth Low Energyデバイス上の個々のサービスを表します。詳細...
Header: | #include <QLowEnergyService> |
qmake: | QT += bluetooth |
Inherits: | 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 。この動作は、間違ったメタ情報を報告するデバイスとのやりとりを単純化する。リクエストをリモートデバイスに転送(forward)できなかった場合、OperationError が設定される。可能性のある理由は、書き込まれるべき特性オブジェクトが現在のサービスに属していないことである。要約すると、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 インスタンスと共有します。1つのインスタンスがサービス詳細の検出を開始すると、残りのすべてのインスタンスが自動的にそれに従います。したがって、以下のスニペットは常に機能します:
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
この enum は、サービスのタイプを記述します。
定数 | 値 | 説明 |
---|---|---|
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() シグナルが発せられる。
注: このシグナルは、セントラル・ロールに関連するユースケースに対してのみ発行される。
readCharacteristic()も参照 。
[signal]
void QLowEnergyService::characteristicWritten(const QLowEnergyCharacteristic &characteristic, const QByteArray &newValue)
このシグナルは、characteristic の値がnewValue に正常に変更されたときに発行される。この変更は、writeCharacteristic()を呼び出すことによってトリガされなければならない。書き込み操作が成功しなかった場合、CharacteristicWriteError フラグを使用してerrorOccurred() シグナルが発行される。
書き込まれた信号の受信は、ターゲット・デバイスが書き込むべき値を受信し、書き込 み要求のステータスを報告したことを示すものとみなすことができる。
注意 :WriteWithoutResponse モードを使用してwriteCharacteristic()が呼び出された場合、このシグナルとerrorOccurred()は発せられることはない。
注: このシグナルは、セントラル・ロールに関連するユースケースでのみ発行される。
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() シグナルが発行される。
注意: このシグナルは、中央ロールに関連するユースケースに対してのみ発行される。
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つの利点がある。第一に、より高速である。第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のサービスインスタンスを取得するために使用されるべきである。
createServiceObject()も参照のこと 。
void QLowEnergyService::readCharacteristic(const QLowEnergyCharacteristic &characteristic)
characteristic の値を読み込む。操作が成功すると、characteristicRead() シグナルが発せられ、そうでない場合はCharacteristicReadError が設定される。一般に、QLowEnergyCharacteristic::Read プロパティが設定されていれば、characteristic は読み取り可能である。
同じリモートデバイスに対するすべての記述子および特性要求は、直列化される。複数の要求を同時に発行する場合、キューが使用される。キューは、同じ特性に対する重複した読み取り要求を排除しない。
特性は、サービスが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
サービスのタイプを返します。
注意: type属性は、サービスがServiceDiscovered 。このフィールドはPrimaryService で初期化される。
注 :Androidでは、サービスがプライマリサービスかセカンダリサービスかを判断することはできない。そのため、すべてのサービスにPrimaryService フラグが設定されている。
void QLowEnergyService::writeCharacteristic(const QLowEnergyCharacteristic &characteristic, const QByteArray &newValue, QLowEnergyService::WriteMode mode = WriteWithResponse)
characteristic の値としてnewValue を書き込む。 正確なセマンティクスは、関連するコントローラオブジェク トのロールによって異なる。
セントラルロール
コールの結果、リモートペリフェラルへのライト要求またはコマンドが発生する。CharacteristicWriteError 操作が成功すると、characteristicWritten() シグナルが発信される。この関数を呼び出しても、現在の書き込み要求の後に周辺機器自身が再び値を変更しない限り、characteristicChanged() シグナルはトリガされません。
mode パラメータは、リモートデバイスが書き込み確認を送るべきかどうかを決定します。書き込まれるcharacteristic は、関連する書き込みモードをサポートしなければなりません。特性がサポートする書き込みモードは、QLowEnergyCharacteristic::Write とQLowEnergyCharacteristic::WriteNoResponse プロパティで示される。
同じリモートデバイスに対するすべての記述子および特性の書き込み要求は、直列化される。複数の書き込み要求を同時に発行する場合、待ち行列が採用される。キューは、同じ特性に対する重複した書き込み要求を排除しない。例えば、同じ記述子が値Aに設定され、その直後に値Bに設定された場合、2つの書 き込み要求は、指定された順序で実行される。
注意: 現在、Bluetooth仕様で定義されている署名付きまたは信頼性のある書き込みを使用することはできません。
特性は、このサービスがServiceDiscovered の状態にあり、サービスに属している場合にのみ書き込むことができます。これらの条件のいずれかが真でない場合、QLowEnergyService::OperationError が設定されます。
注: QLowEnergyCharacteristic::properties ()が書き込み不可特性を報告しているにもかかわらず、この関数を呼び出すと、常にハードウェアへの書き込みが試みられる。同様に、WriteWithoutResponse もハードウェアに送信されるが、その特性はWriteWithResponse にしか対応していない可能性がある。ハードウェアがエラーで返した場合、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()も参照してください 。
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。