タイトル通りだ。
ADC変換完了割込みの優先度を下げて、完了時にsd_ble_gatts_hvx()でNotifyを投げられるようになった。
最初は10秒間隔にしていたのだけど、もう少し早い間隔にしたいと2秒くらいに縮めたところ、sd_ble_gatts_hvx()がNRF_ERROR_INVALID_STATEを返すようになった。
理由をあれこれ考えたのだが、時間を短くしたので、スマホ側をNotify可にする操作が間に合わないままになっているためだろう。
こちらにも、Notify/Indicateできないときに呼ぶとINVALID_STATEになる、と書かれている。
How to know if the Notification/Indication of a Characteristic is enabled? - Nordic Developer Zone
いま作っているようなアプリは、Client側がNotifyを受けることを前提に作っている。
だから、上記リンクの2番目にあるように、CCCDへの書き込みを受けとるようにしてからADCを開始するようにした方がよいかもしれない。
今回は、めんどうなので、INVALID_STATEはスルーするようにした。