2014/10/17

[nrf51]softdevice_sys_evt_handler_set()は、何だ? - (2)

つづき。

softdevice_sys_evt_handler_set()は、nRF51 SDKのドキュメントに説明がある。
あるのだけど・・・正直なところ、なんだかよくわからない。

  • SoftDeviceからのSoCイベントを登録する関数(イベントハンドラってことかな)
  • これを呼ばなかったら、フェッチされない
  • 一度呼んだら、もうキャンセルすることはできないが、関数を差し替えることは可能

このくらい。
SoCイベントがどういうものだとか、何したらいいのかよくわからん。


よくよくドキュメントを見ていくと、「SoftDevice Handler Library」という章があり、そこに説明があるとのこと。

・・・読みつつあるが、何が言いたいのかわからん。
SoftDevice Handler Libraryは、アプリがSoftDeviceイベントを正しく取り出す(フェッチする)のを補助するAPIとのこと。
例として、S110ではBLEイベントをsd_ble_evt_get()で、SoCイベントをsd_evt_get()で取ってくる、と。しかしS210では違うのだと。

うーん、ということは、アプリにシステムから「イベントが来たよ」と通知が来ても、どのAPIを使って取得したらよいかわからないだろうから、SoftDevice Handler LibraryのAPIで呼び出してほしいコールバック関数を登録する方式にして、アプリからフェッチしなくてもよいようにしましょう、というくらいの考え方で良いのかな。

 

でも・・・でもだ。
それがble_stack_init()に入っているのは、あんまり納得できてない。
SOFTDEVICE_HANDLER_INIT()もここだし。
それなら、softdevice_init()みたいな名前にしておいて、一緒にBLEスタックの初期化も入っている方がすっきりするんじゃないかと思うのだ。

もうちょっと、自分の理解度を進めながら、スケルトンを整理していきたいな。

2 件のコメント:

  1. 私も同じ所で悩んでます。
    BLEとsystemのスケジューラが実際の所、どう動いているのか良く分からない。。。

    返信削除
    返信
    1. BLEのプロトコルスタックは考えても仕方がないので、気になるのはそこですよね。
      気にしなくて良いのかもしれないけど、どのくらい気にしなくて良いかが見えていないというのがつらいです。。。

      削除

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。