スリープ命令というのは存在しない
nRF SDKにはスリープモードに移行するためのAPIが存在していました。ところが、nRF Connect SDKはRTOSであるため、そのようなAPIは(調べた限りでは)存在していません。
スリープスレッドというのが存在するらしい
その代わり、RTOSということでスリープ用のスレッドが最も優先順位が低い指定で最初から存在しているようです。優先順位が一番低いということなので、他に全くスレッドが動いていない場合に実行されることでスリープ状態ということになるようです。
が
やってみても全然そんな風になりません。えっ、なぜなっていないのかが分かるのかって?だって電池消費がすごいですもん・・・1日で電池が空っぽに近くなってしまうのでどう見てもスリープスレッドが動いているようには見えません。
誠意調査中ですが・・・
おそらくBluetoothの初期化などを通すとスリープスレッドよりも優先順位の高いスレッドが動いてしまって、そのせいでスリープスレッドが起動しないのではないかと考えていますが、ソースコードを見てもよく分かりません。スレッドの初期化はいっぱいありますが初期化しただけでは動かなさそうなんですよね・・・。
しかも、Bluetoothの初期化って、初期化はできるけれど初期化を解除(なんで言うんだ、日本語でUn-initializedって存在しないよね)することができないので、もしこの仮説が正しいとした場合、機器の電源を入れたままスリープスレッドを使うことが事実上不可能なんじゃないかと思っています。
(Bluetoothを使いたいときだけ初期化する、ということができないので)
ということで
To be continued...