■ホームコントロールデバイスは今はファームウェアの設計&コーディング中。今回作る新型は外部に128KのEEPROMを使えることもあり、ストアドプロシージャとシーケンサーを合わせたような半プログラミング機能を持たせようとしています。例えばたいがいのリモコンでのオン・オフはトグル操作となっているので、意識的にオンにするためには対象機器がオンかオフかを判断した後にスイッチ操作をする必要があります。今まではセンサへの問い合わせとスイッチ操作は分離したままで、サーバー側で制御していたのですが、この方式はトラフィックが多くなり、それだけハングアップする確率も高くなることと、応答性が悪くなるのが問題でした。
この手の複数操作を組み合わせた操作の応答性を改善させるために、
1)デバイス側にインデックス番号で参照できる形でコマンド列を記憶させる。
2)インデックス番号だけで実行できるコマンドコードを持たせる。
ようにしました。さらに、(2)を発展させて、
3)インデックス番号を直列に並べて順序実行できるようにする。
4)インデックス番号列の中にフロー制御コードを持たせる。
ようにするつもりです。要するに簡単なインタープリターを作るわけです。ストアド可能なコマンド列は96セット。シーケンサーが持つフロー制御は無条件ジャンプ、条件付ジャンプと停止、無条件呼出と条件呼出、復帰の6種。レジストリ操作はインクリメント、デクリメント、代入、ゼロ比較、2値一致、過小、過大の比較の7種といったところ。
「プログラム」というよりも仮想CPUのバイナリコードを実行させるイメージに近いです。インデックス番号はいわばユーザー予約のオペレーションコードということになります。実際に何をやるかという指示はインデックスが参照する先に格納されているわけですが、シーケンサー上は何が実行されるのかは解りません。
ストアドプロシージャとして何を格納したのかはデバイスの外側で管理しなければならないけど、ZigBee上のトラフィックを大きく節約できるようになる。今は基本的な機能を少しづつ拡張してはテストして、の繰り返し。一種のスパイラル開発をしている、ことになると思う。