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つ以上の特性を含むことができ、各特性は記述子を含むことができる。結果として、以下の図のような構造になります:

Structure of a generic peripheral

特性は主要な情報キャリアである。これは、値のアクセス許可を記述するvalue ()とproperties ()を持つ。含まれる記述子の一般的な目的は、特性の性質をさらに定義することである。例えば、値がどのように解釈されるかを指定したり、値の変更について値の消費者に通知できるかどうかを指定したりする。

サービス相互作用

サービスオブジェクトが初めて作成されると、その詳細はまだ発見されない。これは、現在のstate ()がDiscoveryRequired であることによって示される。serviceUuid ()とserviceName ()を取得することのみが可能である。

含まれるサービス、特性、記述子の発見 は、discoverDetails()を呼び出すときにトリガーされる。発見中に、state()は、DiscoveryRequired からDiscoveringService を経由して、最終的なServiceDiscovered 状態に遷移する。この遷移は、stateChanged()シグナルで通知される。詳細が判明すると、含まれるすべての特性、記述子、含まれるサービスが判明し、 読み書きが可能になる。

特性と記述子の値は、それぞれQLowEnergyCharacteristicQLowEnergyDescriptor を介して取得できる。しかしながら、これらの属性の直接的な読み書きは、サービスオブジェクトを必要とする。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 がデバイスから切断されることによるサービスの無効化など、その他の操作も同様に共有されます。

QLowEnergyControllerQLowEnergyCharacteristicQLowEnergyDescriptorも参照のこと

メンバー型ドキュメント

[since 6.2] enum QLowEnergyService::DiscoveryMode

この列挙型はサービス発見モードを列挙する。すべてのモードは、サービスの特性と特性の記述子を発見する。モードは、特性値と記述子を読み込むかどうかで異なります。

定数説明
QLowEnergyService::FullDiscovery0完全な発見の間、すべての特性が発見される。すべての特性値と記述子が読み込まれる。
QLowEnergyService::SkipValueDiscovery1最小限の発見の間、すべての特性が発見される。特性値と記述子は読み込まれない。

この列挙型は Qt 6.2 で導入された。

discoverDetails()も参照してください

enum QLowEnergyService::ServiceError

この列挙型は、サービスが存在する間に起こりうるすべてのエラー状態を記述する。error() 関数は、最後に発生したエラーを返します。

定数説明
QLowEnergyService::NoError0エラーは発生していません。
QLowEnergyService::OperationError1サービスが準備できていない状態で操作が試みられました。例えば、ServiceDiscovered state ()にまだ入っていないときにサービスに書き込もうとした場合、または周辺機器への接続が失われたためにサービスが無効である場合などである。
QLowEnergyService::CharacteristicReadError (since Qt 5.5)5特性値の読み取りが失敗した。例えば、readCharacteristic()への呼び出しに応答してトリガされる可能性がある。
QLowEnergyService::CharacteristicWriteError2特性への新しい値の書き込みに失敗した。例えば、読み取り専用の特性に書き込もうとしたときに発生する。
QLowEnergyService::DescriptorReadError (since Qt 5.5)6記述子値の読み取りに失敗した。例えば、readDescriptor()の呼び出しに応答してトリガされる。
QLowEnergyService::DescriptorWriteError3記述子への新しい値の書き込みに失敗した。例えば、読み取り専用の記述子に書き込もうとしたときにトリガーされるかもしれない。
QLowEnergyService::UnknownError (since Qt 5.5)4サービスとの対話時に不明なエラーが発生した。

enum QLowEnergyService::ServiceState

この列挙型は、サービスオブジェクトのstate() を記述する。

定数説明
QLowEnergyService::InvalidService0サービスは、基礎となるデバイスとの接続を失うと無効になる可能性があります。接続が失われても、最後の情報は保持されます。無効なサービスは、デバイスへの接続が再確立されても、それ以上有効になることはできません。
QLowEnergyService::RemoteService1サービスの詳細は、discoverDetails ()を呼び出すことで、まだ判明しない。信頼できる情報は、serviceUuid ()とserviceName ()のみである。
QLowEnergyService::RemoteServiceDiscovering2サービス詳細が検出されている。
QLowEnergyService::RemoteServiceDiscovered3サービスの詳細が検出されました。
QLowEnergyService::LocalService (since Qt 5.7)4サービスは、peripheral role のコントローラオブジェクトに関連付けられています。 このようなサービスオブジェクトは、状態を変更しません。
QLowEnergyService::DiscoveryRequiredRemoteService非推奨。RemoteServiceに名称が変更されました。
QLowEnergyService::DiscoveringServiceRemoteServiceDiscovering非推奨。RemoteServiceDiscoveringに名称が変更されました。
QLowEnergyService::ServiceDiscoveredRemoteServiceDiscovered非推奨。RemoteServiceDiscovered に名称変更。

enum QLowEnergyService::ServiceType
flags QLowEnergyService::ServiceTypes

この enum は、サービスのタイプを記述します。

定数説明
QLowEnergyService::PrimaryService0x0001サービスはトップレベル/プライマリサービスです。このタイプフラグが設定されていない場合、サービスはセカンダリサービスと見なされます。各サービスは、IncludedServiceによって示される別のサービスによってインクルードされる可能性があります。
QLowEnergyService::IncludedService0x0002このサービスは他のサービスによってインクルードされます.いくつかのプラットフォームでは、現在のサービスを含むサービスが発見されるまで、このフラグを決定することはできません。

ServiceTypes型はQFlags<ServiceType>のtypedefである.これは、ServiceType値のORの組み合わせを格納します。

enum QLowEnergyService::WriteMode

この列挙型は、特性値を書き込むときに使用されるモードを記述する。特性は、properties を介して、サポートされる書き込みモードを通知する。

定数説明
QLowEnergyService::WriteWithResponse0特性がこのモードを使用して書き込まれる場合、周辺は書き込み確認を送らなければならない。操作が成功した場合、確認はcharacteristicWritten() 信号を通して出されます。そうでなければ、CharacteristicWriteError が送られる。特性は、この書き込みモードをサポートするためにQLowEnergyCharacteristic::Write プロパティを設定しなければならない。
QLowEnergyService::WriteWithoutResponse1特性がこのモードを使用して書き込まれた場合、リモート周辺は書き込み確認を送信してはならない。操作の成功は判断できず、ペイロードは 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)

このシグナルは、サービスの状態が変化したときに発せられる。newStatestate() でも取得できる。

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 を書き込みます。 正確なセマンティクスは、関連するコントローラオブジェクトのロールに依存します。

中央の役割

この呼び出しは、リモート周辺機器への書き込み要求またはコマンドになります。CharacteristicWriteError 操作が成功すると、characteristicWritten() シグナルが発信される。この関数を呼び出しても、現在の書き込み要求の後に周辺機器自身が値を再び変更しない限り、characteristicChanged() シグナルはトリガされません。

mode パラメータは、リモートデバイスが書き込み確認を送るべきかどうかを決定します。書き込まれるcharacteristic は、関連する書き込みモードをサポートしなければなりません。特性がサポートする書き込みモードは、QLowEnergyCharacteristic::WriteQLowEnergyCharacteristic::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()も参照のこと

© 2025 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.