「Qtの基礎 - Bluetooth Low Energy」の版間の差分

ナビゲーションに移動 検索に移動
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 <memory>
  #include <QDebug>
  #include <QDebug>
   
   
539行目: 541行目:
   
   
  private:
  private:
     std::unique_ptr<QLowEnergyController> controller;
     QLowEnergyController controller;       // BLE接続とサービス探索を制御するコントローラ
     std::unique_ptr<QTimer>               discoveryTimeout;
     QTimer              discoveryTimeout; // サービス探索のタイムアウトを管理するタイマ
   
   
    // コントローラの各種シグナルを接続
    // 接続 / 切断, サービス探索の進行状況, 状態変更, エラー
     void connectControllerSignals()
     void connectControllerSignals()
     {
     {
       connect(controller.get(), &QLowEnergyController::connected, this, &BLEServiceDiscovery::onConnected);
       connect(&controller, &QLowEnergyController::connected, this, &BLEServiceDiscovery::onConnected);
       connect(controller.get(), &QLowEnergyController::disconnected, this, &BLEServiceDiscovery::onDisconnected);
       connect(&controller, &QLowEnergyController::disconnected, this, &BLEServiceDiscovery::onDisconnected);
       connect(controller.get(), &QLowEnergyController::serviceDiscovered, this, &BLEServiceDiscovery::onServiceDiscovered);
       connect(&controller, &QLowEnergyController::serviceDiscovered, this, &BLEServiceDiscovery::onServiceDiscovered);
       connect(controller.get(), &QLowEnergyController::discoveryFinished, this, &BLEServiceDiscovery::onDiscoveryFinished);
       connect(&controller, &QLowEnergyController::discoveryFinished, this, &BLEServiceDiscovery::onDiscoveryFinished);
       connect(controller.get(), static_cast<void(QLowEnergyController::*)(QLowEnergyController::Error)>(&QLowEnergyController::error), this, &BLEServiceDiscovery::onError);
       connect(&controller, static_cast<void(QLowEnergyController::*)(QLowEnergyController::Error)>(&QLowEnergyController::error), this, &BLEServiceDiscovery::onError);
       connect(controller.get(), &QLowEnergyController::stateChanged, this, &BLEServiceDiscovery::onStateChanged);
       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)
     {
     {

案内メニュー