diverta / onecard-fido

MIT License
0 stars 0 forks source link

[nCS更改対応] ペアリングが行われない不具合を解消する #739

Closed makmorit closed 1 year ago

makmorit commented 1 year ago

概要

737 の対応により、nCS v2.2.0に対応するためのコード移行を実施したnRF5340アプリケーションですが、Bluetoothペアリングが行われず、PCやスマートフォン側でタイムアウトしてしまいます。

具体的には、app_ble_pairing.cにおけるペアリング時のコールバック関数群が呼び出されず、結果としてペアリングに必要な暗号化処理等が続行されないため、無応答状態となります。 この不具合を収束させるための対応を行いたいと思います。

makmorit commented 1 year ago

進捗

具体的には、app_ble_pairing.cにおけるペアリング時のコールバック関数群が呼び出されず、結果としてペアリングに必要な暗号化処理等が続行されないため、無応答状態となります。

現状ですが、ZephyrのBluetoothモジュールから、何らのログも出力されないため、おそらくですが、他に組み込んだモジュールやサブシステムが悪さをしているとしか考えられない状況です。

なお基板(nRF5340 DK)は、Bluetoothモジュール(ペアリング処理)のサンプルアプリケーションBluetooth: Peripheral SC-onlyであれば、正常に動作しているようです。 (「BLEペアリングサンプル動作確認手順書」により確認しています)

今後の進め方

現状のnRF5340アプリケーションは、あまりにもたくさんのモジュール/サブシステムを組み込みすぎたため、本件問題の切り分けが非常に困難となっています。

そこで、現状正常に動作している前述「Bluetooth: Peripheral SC-only」をベースに、nRF5340アプリケーションを、再編成したいと考えます。

まず手始めに、今までのnRF5340アプリケーションをベースとして、ペアリングモードでペアリングできるというだけのアプリケーションを「Bluetooth: Peripheral SC-only」を手本として作成してみます。 (当然のことながら、他の機能はいったんすべて外すことになります)

makmorit commented 1 year ago

進捗

c4b7f66までの対応の結果、ペアリング時のコールバック関数群が呼び出されない不具合が解消された事を確認しました。 以下の不具合があったようです。

*** Booting Zephyr OS build v3.2.99-ncs1 ***
[00:00:00.011,718] <inf> app_usb_hid: Get USB HID device success
[00:00:00.011,932] <inf> app_usb: USB initialized
[00:00:00.031,158] <inf> bt_hci_core: No ID address. App must call settings_load()
[00:00:00.031,158] <inf> app_bluetooth: Bluetooth initialized
[00:00:00.031,188] <inf> app_bluetooth: Passkey for BLE pairing: 199881
[00:00:00.031,250] <inf> app_settings: Buffer size for reading data from storage: 1024 bytes
[00:00:00.533,508] <inf> app_bluetooth: Advertising successfully started (Non-Pairing mode)
[00:00:00.533,660] <inf> app_main: Secure device application (PCA10095) version 0.4.8
[00:00:08.682,525] <dbg> app_process: button_pressed_long: Long pushed
[00:00:08.684,814] <inf> app_bluetooth: Advertising successfully started (Pairing mode)
[00:00:15.977,813] <inf> app_bluetooth: Connected
[00:00:16.056,304] <wrn> bt_l2cap: Ignoring data for unknown channel ID 0x003a
[00:00:16.586,303] <inf> app_ble_pairing: Passkey for 3C:22:FB:87:13:5E (public): 199881
[00:00:27.634,582] <inf> app_bluetooth: Connected 3C:22:FB:87:13:5E (public) with security level 4
[00:00:27.727,569] <inf> app_ble_pairing: Pairing with authentication completed (bonded)
[00:00:45.321,929] <inf> app_bluetooth: Disconnected (reason 0x13)
[00:00:45.324,768] <inf> app_bluetooth: Advertising successfully started (Non-Pairing mode)
Entering system off; press BUTTON to restart... 

ただし現状、上記調査・対応のために、FIDO機能、管理機能などの業務処理を停止させています。 明日以降の作業で、少しずつ業務機能の再組込み/再稼働を進めたいと思います。

makmorit commented 1 year ago

直近の作業項目

現在、本件障害調査・対応のために、以下のプラットフォーム依存コードを停止させていますが、これらをプロジェクトに再取り込みし、再稼働させます。 使用スタック量に問題がある場合は必要に応じ、専用スレッド化します。

makmorit commented 1 year ago

対応結果の確認

a41c007までの対応の結果、PCやスマートフォンとのBluetoothペアリングが行われるようになった事を確認いたしました。

下図はmacOS 12.6とペアリングを完了した時の様子になります。