〔マイコンのトップに戻る〕
[準備編]
[module編]
[GPIO編]
[通信編]
[I2S編]
[WiFi編]
[BLE編2]
[BLE編3]
[色々編]
| クラス |
出力 |
到達距離 |
| Class 1 |
100mW (技適:10mW) |
100m |
| Class 2 |
2.5mW |
10m |
| Class 3 |
1mW |
1m |
プロトコルスタックの概念図

def bt_irq(event, data):
if event == _IRQ_CENTRAL_CONNECT:
# セントラルがこの周辺機器に接続しました。
conn_handle, addr_type, addr = data
elif event == _IRQ_CENTRAL_DISCONNECT:
# セントラルがこの周辺機器から切断しました。
conn_handle, addr_type, addr = data
elif event == _IRQ_GATTS_WRITE:
# クライアントがこのcharacteristic 又はdescriptorに書き込みました。
conn_handle, attr_handle = data
elif event == _IRQ_GATTS_READ_REQUEST:
# クライアントが読み取りを発行しました。注:これはSTM32でのみサポートされています。
# 読み取りを拒否する場合はゼロ以外の整数を返し、
# 読み取りを受け入れる場合はゼロ(又は無し)を返します。
conn_handle, attr_handle = data
elif event == _IRQ_SCAN_RESULT:
# シングルスキャン結果。
addr_type, addr, adv_type, rssi, adv_data = data
elif event == _IRQ_SCAN_DONE:
# スキャン期間が終了したか、手動で停止しました。
pass
elif event == _IRQ_PERIPHERAL_CONNECT:
# gap_connect()は成功しました。
conn_handle, addr_type, addr = data
elif event == _IRQ_PERIPHERAL_DISCONNECT:
# 接続されている周辺機器が切断されました。
conn_handle, addr_type, addr = data
elif event == _IRQ_GATTC_SERVICE_RESULT:
# 接続されたデバイスがサービスを返しました。
conn_handle, start_handle, end_handle, uuid = data
elif event == _IRQ_GATTC_SERVICE_DONE:
# サービス検出が完了すると呼び出されます。
# 注:ステータスは成功するとゼロになり、それ以外の場合は実装固有の値になります。
conn_handle, status = data
elif event == _IRQ_GATTC_CHARACTERISTIC_RESULT:
# gattc_discover_services()によって検出された各characteristicに対して呼び出されます。
conn_handle, def_handle, value_handle, properties, uuid = data
elif event == _IRQ_GATTC_CHARACTERISTIC_DONE:
# キャラクタリスティック検出が完了すると呼び出されます。
# 注:ステータスは成功するとゼロになり、それ以外の場合は実装固有の値になります。
conn_handle, status = data
elif event == _IRQ_GATTC_DESCRIPTOR_RESULT:
# gattc_discover_descriptors()によって検出されたdescriptorごとに呼び出されます。
conn_handle, dsc_handle, uuid = data
elif event == _IRQ_GATTC_DESCRIPTOR_DONE:
# ディスクリプタ検出が完了すると呼び出されます。
# 注:ステータスは成功するとゼロになり、それ以外の場合は実装固有の値になります。
conn_handle, status = data
elif event == _IRQ_GATTC_READ_RESULT:
# gattc_read()が完了しました。
conn_handle, value_handle, char_data = data
elif event == _IRQ_GATTC_READ_DONE:
# gattc_read()が完了しました。
# 注:value_handleはbtstackではゼロになります(但し、NimBLEには存在します)。
# 注:ステータスは成功するとゼロになり、それ以外の場合は実装固有の値になります。
conn_handle, value_handle, status = data
elif event == _IRQ_GATTC_WRITE_DONE:
# gattc_write()が完了しました。
# 注:value_handleはbtstackではゼロになります(但し、NimBLEには存在します)。
# 注:ステータスは成功するとゼロになり、それ以外の場合は実装固有の値になります。
conn_handle, value_handle, status = data
elif event == _IRQ_GATTC_NOTIFY:
# サーバーが通知要求を送信しました。
conn_handle, value_handle, notify_data = data
elif event == _IRQ_GATTC_INDICATE:
# サーバーが指示要求を送信しました。
conn_handle, value_handle, notify_data = data
elif event == _IRQ_GATTS_INDICATE_DONE:
# クライアントが指示を確認しました。
# 注:確認応答が成功するとステータスはゼロになり、それ以外の場合は実装固有の値になります。
conn_handle, value_handle, status = data
elif event == _IRQ_MTU_EXCHANGED:
# ATT MTU交換が完了しました(自機器又はリモートデバイスのいずれかによって開始されました)。
conn_handle, mtu = data
elif event == _IRQ_L2CAP_ACCEPT:
# 新しいチャンネルが承認されました。
# 接続を拒否する場合はゼロ以外の整数を返し、受け入れる場合はゼロ(又は無し)を返します。
conn_handle, cid, psm, our_mtu, peer_mtu = data
elif event == _IRQ_L2CAP_CONNECT:
# これで、新しいチャネルが接続されました(接続又は受け入れの結果として)。
conn_handle, cid, psm, our_mtu, peer_mtu = data
elif event == _IRQ_L2CAP_DISCONNECT:
# 既存のチャネルが切断されている(ステータスがゼロ)か、接続の試行が失敗しました(ゼロ以外のステータス)。
conn_handle, cid, psm, status = data
elif event == _IRQ_L2CAP_RECV:
# 新しいデータがチャネルで利用可能です。l2cap_recvintoを使用して読み取ります。
conn_handle, cid = data
elif event == _IRQ_L2CAP_SEND_READY:
# Falseを返した以前のl2cap_sendが完了し、チャネルを再度送信する準備が整いました。
# ステータスがゼロ以外の場合、送信バッファがオーバーフローした為、アプリケーションはデータを再送信する必要があります。
conn_handle, cid, status = data
elif event == _IRQ_CONNECTION_UPDATE:
# リモートデバイスの接続パラメータが更新されました。
conn_handle, conn_interval, conn_latency, supervision_timeout, status = data
elif event == _IRQ_ENCRYPTION_UPDATE:
# 暗号化状態が変更されました(ペアリング又はボンディングの結果である可能性があります)。
conn_handle, encrypted, authenticated, bonded, key_size = data
elif event == _IRQ_GET_SECRET:
# 保存されたシークレットを返します。
# keyがNoneの場合、このsec_typeのインデックス番目の値を返します。
# それ以外の場合は、このsec_typeとキーに対応する値を返します。
sec_type, index, key = data
return value
elif event == _IRQ_SET_SECRET:
# このsec_typeとキーのシークレットをストアに保存します。
sec_type, key, value = data
return True
elif event == _IRQ_PASSKEY_ACTION:
# ペアリング時のパスキー要求に応答します。
# 詳細については、gap_passkey()を参照して下さい。
# アクションは、構成された「io」構成と互換性のあるアクションになります。
# アクションが「数値比較」の場合、パスキーはゼロ以外になります。
conn_handle, action, passkey = data
【きむ茶工房ガレージハウス】
Copyright (C) 2006-2021 Shigehiro Kimura All Rights Reserved.