複数のBLEwriteCharacteristicおよびreadCharacteristic呼び出しを管理する方法は?

マヘンドラ・グナワルデナ

私は現在、CC2650 Bluetooth Low Energy(BLE)デバイスと通信するAndroidアプリケーションに取り組んでいます。

関数を使用して、1writeCharacteristic回のreadCharacteristic呼び出しに続いて複数回の呼び出しを行う必要があります。この順序は、機能に影響を与えることなく逆にすることができます。


質問1:writeCharacteristicまたはのみreadCharacteristicが個別に呼び出された場合、ソフトウェアは期待どおりに機能します。しかし、呼び出しが順番に行われると、ソフトウェアは機能しないようです。

以下はコードです。


コードを参照するwriteCharacteristicコードセクション(UIスレッド)

final BluetoothGattCharacteristic characteristic_select = mGattCharacteristicMap.get("hotstate");
    if (characteristic_select != null) {
        final int charaProp = characteristic_select.getProperties();
        if ((charaProp | BluetoothGattCharacteristic.PROPERTY_WRITE) > 0) {
            String strData = "00";
            int len = strData.length();
            byte[] data = new byte[len / 2];
            for (int i = 0; i < len; i += 2) {
                data[i / 2] = (byte) ((Character.digit(strData.charAt(i), 16) << 4)
                        + Character.digit(strData.charAt(i + 1), 16));
            }
            characteristic_select.setValue(data);
            mBLE_Service.writeCharacteristic(characteristic_select);
        }
    }

readCharacteristic(UIスレッド)を使用したコードセクション。注キューに入れられている複数の読み取り呼び出し

final BluetoothGattCharacteristic characteristic_time = mGattCharacteristicMap.get("timestate");
if (characteristic_time != null) {
        final int charaProp = characteristic_time.getProperties();
        if ((charaProp | BluetoothGattCharacteristic.PROPERTY_READ) > 0) {
            for (int i = 0; i < 10; i++) {
                mBLE_Service.readCharacteristic(characteristic_time);
                final Handler handler = new Handler();
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {

                    }
                }, 5000);
            }
        }
    }

のコード readCharacteristic

 public void readCharacteristic(BluetoothGattCharacteristic characteristic) {

        // Queue the characteristic to read, since several reads are done on startup
        characteristicQueue.add(characteristic);

        // If there is only 1 item in the queue, then read it. If more than 1, it is handled
        // asynchronously in the callback
        if((characteristicQueue.size() <= 1)) {

            mBluetoothGatt.readCharacteristic(characteristic);
        }

    }

のコード writeCharacteristic

  public void writeCharacteristic(BluetoothGattCharacteristic characteristic) {
    if (mBluetoothAdapter == null || mBluetoothGatt == null) {
        Log.w(TAG, "BluetoothAdapter not initialized");
        return;
    }
    mBluetoothGatt.writeCharacteristic(characteristic);

}

のコード onCharacteristicRead

       @Override
    public void onCharacteristicRead(BluetoothGatt gatt,
                                     BluetoothGattCharacteristic characteristic,
                                     int status) {
        // Read action has finished, remove from queue
        characteristicQueue.remove();

        if (status == BluetoothGatt.GATT_SUCCESS) {
            broadcastUpdate(ACTION_DATA_AVAILABLE, characteristic);
        }

        // Handle the next element from the queues
        if(characteristicQueue.size() > 0)
            mBluetoothGatt.readCharacteristic(characteristicQueue.element());
        else if(descriptorWriteQueue.size() > 0)
            mBluetoothGatt.writeDescriptor(descriptorWriteQueue.element());
    }

のコード onCharacteristicWrite

       @Override
    public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
        super.onCharacteristicWrite(gatt, characteristic, status);
        if (status==BluetoothGatt.GATT_SUCCESS){
            broadcastUpdate(ACTION_WRITE_SUCCESS, characteristic);
            } 
    }

質問2:複数の読み取りがあるため、処理するキューを作成しました。読み取りと書き込みが問題の原因だと思いますか?もしそうなら、読み取りと書き込みを管理およびブロックする方法に関する提案はありますか?

注:コードはAndroid API21以降用です

参照:

エミル

キューが必要であることを理解することで、途中まで進んでいます。ただし、すべてのGATT操作に使用する必要があります。私の完全な答えを参照してください:Android BLE BluetoothGatt.writeDescriptor()は時々falseを返します

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

複数のObservable呼び出しの可視性を管理する方法は?

分類Dev

複数のStringReplace呼び出しを改善する方法は?

分類Dev

複数のAJAX呼び出しを回避する方法は?

分類Dev

複数のAJAX呼び出しを回避する方法は?

分類Dev

qaf Webサービス要求呼び出しで複数の要求を持つCookieを管理する方法は?

分類Dev

同じ関数を呼び出す複数のAjax呼び出しを処理する方法は?

分類Dev

ビューで複数のajax呼び出しを呼び出す方法は?

分類Dev

複数の戻り値を持つJavascriptおよびPHPajax呼び出しは、未定義を返します

分類Dev

複数のAjax呼び出しを回避する方法

分類Dev

C#-複数のif呼び出しを回避する方法

分類Dev

REACTおよびFLUXでAPI呼び出しを作成する方法

分類Dev

複数のEnumerable.Zip呼び出しを処理する方法は?

分類Dev

単一および複数のSaveChanges()呼び出しを使用するEntity Framework(6)トランザクションの違いは何ですか

分類Dev

Hiveで複数の同一の演算子および関数呼び出しを最適化しますか?

分類Dev

1回の呼び出しで複数のajax呼び出し関数を実行する方法

分類Dev

jest spiesの複数の呼び出しで複数の引数をチェックする方法は?

分類Dev

1回の呼び出しで複数のテンプレート関数を呼び出す方法は?

分類Dev

残り火、関係、および複数の呼び出し

分類Dev

API呼び出しから「mp4」および「webM」形式の画像を含める方法はありますか?

分類Dev

別の関数で複数の呼び出し元関数を作成する方法

分類Dev

Javascriptの_this、さまざまなタイプの関数呼び出し、および関数内で関数を呼び出す方法を理解していますか?

分類Dev

Firebaseへの複数の呼び出しをより安全に行う方法は?-迅速

分類Dev

複数のAPIURLを呼び出し、同時に呼び出す

分類Dev

最後のAPI呼び出しに基づいてUIを更新し、前の呼び出しをキャンセルするように、複数のRetrofit呼び出しを管理します

分類Dev

Pythonスクリプトから複数のIPython / Jupyterカーネルを管理および通信する方法は?

分類Dev

JavaScript:複数の非同期関数を連続して呼び出すためのより良い方法は?

分類Dev

Google Test Framework で、関数呼び出しまたは別の関数呼び出しを期待する方法は?

分類Dev

onPress propで複数の関数を呼び出す方法は?

分類Dev

複数の依存関数を呼び出す方法は?

Related 関連記事

  1. 1

    複数のObservable呼び出しの可視性を管理する方法は?

  2. 2

    複数のStringReplace呼び出しを改善する方法は?

  3. 3

    複数のAJAX呼び出しを回避する方法は?

  4. 4

    複数のAJAX呼び出しを回避する方法は?

  5. 5

    qaf Webサービス要求呼び出しで複数の要求を持つCookieを管理する方法は?

  6. 6

    同じ関数を呼び出す複数のAjax呼び出しを処理する方法は?

  7. 7

    ビューで複数のajax呼び出しを呼び出す方法は?

  8. 8

    複数の戻り値を持つJavascriptおよびPHPajax呼び出しは、未定義を返します

  9. 9

    複数のAjax呼び出しを回避する方法

  10. 10

    C#-複数のif呼び出しを回避する方法

  11. 11

    REACTおよびFLUXでAPI呼び出しを作成する方法

  12. 12

    複数のEnumerable.Zip呼び出しを処理する方法は?

  13. 13

    単一および複数のSaveChanges()呼び出しを使用するEntity Framework(6)トランザクションの違いは何ですか

  14. 14

    Hiveで複数の同一の演算子および関数呼び出しを最適化しますか?

  15. 15

    1回の呼び出しで複数のajax呼び出し関数を実行する方法

  16. 16

    jest spiesの複数の呼び出しで複数の引数をチェックする方法は?

  17. 17

    1回の呼び出しで複数のテンプレート関数を呼び出す方法は?

  18. 18

    残り火、関係、および複数の呼び出し

  19. 19

    API呼び出しから「mp4」および「webM」形式の画像を含める方法はありますか?

  20. 20

    別の関数で複数の呼び出し元関数を作成する方法

  21. 21

    Javascriptの_this、さまざまなタイプの関数呼び出し、および関数内で関数を呼び出す方法を理解していますか?

  22. 22

    Firebaseへの複数の呼び出しをより安全に行う方法は?-迅速

  23. 23

    複数のAPIURLを呼び出し、同時に呼び出す

  24. 24

    最後のAPI呼び出しに基づいてUIを更新し、前の呼び出しをキャンセルするように、複数のRetrofit呼び出しを管理します

  25. 25

    Pythonスクリプトから複数のIPython / Jupyterカーネルを管理および通信する方法は?

  26. 26

    JavaScript:複数の非同期関数を連続して呼び出すためのより良い方法は?

  27. 27

    Google Test Framework で、関数呼び出しまたは別の関数呼び出しを期待する方法は?

  28. 28

    onPress propで複数の関数を呼び出す方法は?

  29. 29

    複数の依存関数を呼び出す方法は?

ホットタグ

アーカイブ