=========================
arms_event_loop()
=========================

関数
----

.. c:function:: int arms_event_loop(arms_context_t *ctx, int port, size_t fragment, arms_callback_tbl_t *cb_tbl, void *udata)

呼び出し方向
------------

アプリケーション->libarms

目的
----
RS からのARMS プロトコルによる制御指示を待ち受け、適切に処理する。

説明
----
本関数を呼び出すと、ライブラリ内でARMS プロトコルによる制御指示を待ち受けるループを開始し、以後SA は常時RS からの遠隔制御の管理下となる。
遠隔制御に伴い必要に応じてコールバック関数が呼ばれる。

引数
----

:c:type:`arms_context_t` :c:data:`*ctx`
  内部ステートを保持するコンテキスト構造体ポインタ。
  :c:func:`arms_init` により取得したポインタをそのまま指定する。
:c:type:`int` :c:data:`port`
  待ち受けに利用するポート番号。
    * 0 を指定すると、デフォルトのポート番号として10443 を使う。
    * 0 以外を指定すると、そのポート番号を待ち受けポートとして使う。
:c:type:`size_t` :c:data:`fragment`
  コンフィグの分割送信のブロック長[bytes]
    * 0
       libarms 内に全てバッファリングしてからまとめて渡す。
    * 1以上
       コンフィグを指定された大きさ以下のブロックに分割して渡す。
:c:type:`arms_callback_tbl_t` :c:data:`*cb_tbl`
  各種コールバック関数へのポインタが納められた構造体。デバイスドライバの関数テーブルと同じようなイメージ。詳細は :c:type:`arms_callback_tbl_t` を参照。
:c:type:`void` :c:data:`*udata`
  コールバック関数へそのまま渡されるポインタ


返り値
------

:c:macro:`0`
   正常終了
:c:macro:`非0`
   正常に終了(SMFv2による制御の終了、事後処理の指示あり)
     :c:macro:`ARMS_EREBOOT`
       RSよりリブート要求を受信し制御を終了
     :c:macro:`ARMS_EPULL`
       Pull 処理より再実行を行う必要がある。
       RS からPull 先としてLS もしくはRS が指定されるがこれは :c:func:`arms_pull` 関数内部で適切に処理される
:c:macro:`非0`
   異常終了( :ref:`error-code-label` 参照) 
     :c:macro:`ARMS_ECALLBACK`
       コールバック関数呼び出しでエラーを検出
     :c:macro:`ARMS_ESYSTEM`
       システムエラーを検出(メモリ不足など)
     :c:macro:`ARMS_EINVAL`
       引数の異常

コールバック関数からの呼び出し
------------------------------

不可

ヒストリ
--------

このAPIはVer2.10で追加された。
