12,925
回編集
(→使用例) |
|||
527行目: | 527行目: | ||
==== 使用例 ==== | ==== 使用例 ==== | ||
<syntaxhighlight lang="c++"> | <syntaxhighlight lang="c++"> | ||
// BLEのサービス探索を管理するクラス | |||
// BLEデバイスへの接続, サービスの探索と監視 | |||
#include <QObject> | #include <QObject> | ||
#include <QLowEnergyController> | #include <QLowEnergyController> | ||
#include <QLowEnergyService> | #include <QLowEnergyService> | ||
#include <QTimer> | #include <QTimer> | ||
#include <QDebug> | #include <QDebug> | ||
539行目: | 541行目: | ||
private: | private: | ||
QLowEnergyController controller; // BLE接続とサービス探索を制御するコントローラ | |||
QTimer discoveryTimeout; // サービス探索のタイムアウトを管理するタイマ | |||
// コントローラの各種シグナルを接続 | |||
// 接続 / 切断, サービス探索の進行状況, 状態変更, エラー | |||
void connectControllerSignals() | void connectControllerSignals() | ||
{ | { | ||
connect(controller | connect(&controller, &QLowEnergyController::connected, this, &BLEServiceDiscovery::onConnected); | ||
connect(controller | connect(&controller, &QLowEnergyController::disconnected, this, &BLEServiceDiscovery::onDisconnected); | ||
connect(controller | connect(&controller, &QLowEnergyController::serviceDiscovered, this, &BLEServiceDiscovery::onServiceDiscovered); | ||
connect(controller | connect(&controller, &QLowEnergyController::discoveryFinished, this, &BLEServiceDiscovery::onDiscoveryFinished); | ||
connect(controller | connect(&controller, static_cast<void(QLowEnergyController::*)(QLowEnergyController::Error)>(&QLowEnergyController::error), this, &BLEServiceDiscovery::onError); | ||
connect(controller | connect(&controller, &QLowEnergyController::stateChanged, this, &BLEServiceDiscovery::onStateChanged); | ||
} | } | ||
// 個別のBLEサービスに対するシグナル | |||
// 状態変更とエラーイベントを監視してログを出力する | |||
void connectServiceSignals(QLowEnergyService *service) | void connectServiceSignals(QLowEnergyService *service) | ||
{ | { | ||
563行目: | 569行目: | ||
} | } | ||
// エラーコードの変換 | |||
QString getErrorMessage(QLowEnergyController::Error error) | QString getErrorMessage(QLowEnergyController::Error error) | ||
{ | { | ||
627行目: | 634行目: | ||
// デバイスへの接続とサービス探索の開始 | // デバイスへの接続とサービス探索の開始 | ||
void startDiscovery(const QBluetoothDeviceInfo& device) | // コントローラの初期化, シグナルの接続, デバイスへの接続開始, タイムアウトタイマの開始 | ||
void startDiscovery(const QBluetoothDeviceInfo &device) | |||
{ | { | ||
try { | try { | ||
647行目: | 655行目: | ||
} | } | ||
// 探索を停止 | // 探索を停止 (タイムアウトタイマも停止) | ||
void stopDiscovery() | void stopDiscovery() | ||
{ | { | ||
664行目: | 672行目: | ||
signals: | signals: | ||
void serviceDiscovered(QLowEnergyService *service); | void serviceDiscovered(QLowEnergyService *service); // 新しいサービスが発見された時に発行 | ||
void discoveryComplete(); | void discoveryComplete(); // 全てのサービス探索が完了した時に発行 | ||
void errorOccurred(const QString &error); | void errorOccurred(const QString &error); // エラーが発生した時に発行 | ||
void connectionStateChanged(QLowEnergyController::ControllerState state); | void connectionStateChanged(QLowEnergyController::ControllerState state); // 接続状態が変更された時に発行 | ||
private slots: | private slots: | ||
// デバイスへの接続が完了した時 (タイムアウトタイマを停止して、サービス探索を開始) | |||
void onConnected() | void onConnected() | ||
{ | { | ||
679行目: | 688行目: | ||
} | } | ||
// デバイスから切断された時 (タイムアウトタイマを停止) | |||
void onDisconnected() | void onDisconnected() | ||
{ | { | ||
685行目: | 695行目: | ||
} | } | ||
// 新しいサービスが発見された時 | |||
void onServiceDiscovered(const QBluetoothUuid& uuid) | void onServiceDiscovered(const QBluetoothUuid& uuid) | ||
{ | { | ||
697行目: | 708行目: | ||
} | } | ||
// サービス探索が完了した時 | |||
void onDiscoveryFinished() | void onDiscoveryFinished() | ||
{ | { | ||
704行目: | 716行目: | ||
} | } | ||
// エラーが発生した時 | |||
void onError(QLowEnergyController::Error error) | void onError(QLowEnergyController::Error error) | ||
{ | { | ||
711行目: | 724行目: | ||
} | } | ||
// タイムアウトが発生した時 (探索を停止して、エラーとして通知) | |||
void onDiscoveryTimeout() | void onDiscoveryTimeout() | ||
{ | { | ||
718行目: | 732行目: | ||
} | } | ||
// 接続状態が変更された時 (状態の変更をログ出力して、通知) | |||
void onStateChanged(QLowEnergyController::ControllerState state) | void onStateChanged(QLowEnergyController::ControllerState state) | ||
{ | { |