============
  制限事項
============

現在、以下の制限事項があります。

■制限事項

1) POSIX/LINUX 関数の移植状況について
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  移植関数は IoT.js を動作させるために必要なもののみとなります。
  POSIX/LINUX の関数仕様に完全対応しているわけではありません。
  移植状況詳細については、下記のドキュメントを参照してください。

  - 移植関数一覧.xlsx


2) 最大ソケット数について
~~~~~~~~~~~~~~~~~~~~~~~~~
  LWIP にて使用可能なソケット数やメモリサイズ等を下記設定ファイルにて
  設定しています。
  設定を変更する場合は設定ファイルを編集して再ビルドしてください。

    ファイルパス：
        iotjs / src / platform / mbedos5 / mbed_app.json

    161:  "target_overrides": {
     +1:    "*": {
     +1:      "lwip.socket-max": 60,
     +1:      "lwip.tcp-server-max": 60,
     +1:      "lwip.tcp-socket-max": 60,
     +1:      "lwip.udp-socket-max": 60,
     +1:      "lwip.pbuf-pool-size": 10,
     +1:      "lwip.pbuf-pool-bufsize": 1072,
     +1:      "lwip.mem-size": 3200
     +1:    }
     +1:  }


3) IPv6 について
~~~~~~~~~~~~~~~~
  mbed-os(5.9.3)のデフォルト設定はIPv6が無効になっています。
  IPv6を有効にする場合は下記設定ファイルを編集して再ビルドしてください。
  ※なお IPv6 を有効にした場合の影響範囲および動作については未確認です。

    ファイルパス：
        iotjs / src / platform / mbedos5 / mbed_app.json

    161:  "target_overrides": {
     +1:    "*": {
 <追加>:      "lwip.ipv6-enabled": true,
     +1:      "lwip.socket-max": 60,
     +1:      "lwip.tcp-server-max": 60,
     +1:      "lwip.tcp-socket-max": 60,
     +1:      "lwip.udp-socket-max": 60,
     +1:      "lwip.pbuf-pool-size": 10,
     +1:      "lwip.pbuf-pool-bufsize": 1072,
     +1:      "lwip.mem-size": 3200
     +1:    }
     +1:  }


4) ネットワーク環境の制御について
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  現状、ネットワークへの接続は EthernetInterface クラスへマッピングされる
デバイス(GR-Peach の場合はオンボードのデバイス)のみをサポートしています。
  javascript から制御する方法については、下記のドキュメントを参照してください。

  - ネットワーク環境の制御について.txt


5) カメラ・LCDの制御について
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  videoモジュール(カメラ)とdisplayモジュール(LCD)を同時に使用する場合、
  display.openLCD() を実行後に video.openCMOSCamera() を実行してください。

  また、lcd.start() の format の指定ついて、各レイヤーに対して初回実行時のみ
  有効になります。
  二回目以降は初回と異なる format を指定しても、初回の設定が有効になります。

    例）
      lcd.startSync(0, buf, 'rgb565');
      lcd.stopSync(0);
      lcd.startSync(0, buf, 'rgb888'); // format は 'rgb565' になります


6) IoT.js オリジナルの http(https) モジュールの問題について
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  IoT.js オリジナルの http(https) モジュールにて、一回の SOCKET 通信では送りきれ
  ないサイズのデータを送信しようとすると、二回目以降に送信されるデータを含む領域
  が送信前に解放 (＝破壊) されてしまうことがわかりました。

  この問題を回避するため、次の対策を行いました。

    1. IoT.js オリジナルの送信関数 write() をオーバーライドし、その関数内部で
       データをあらかじめ一回の SOCKET 通信で送りきれるサイズに分割しておく。
       分割したデータを逐次オリジナルの送信関数に渡す。
              - 4096 バイトごとに分割
              - ユーザコードからは write() 関数はトランスペアレント
    2. POSIX 層の SOCKET への送信処理は、引数で指定されたサイズ分を送り切るまで
       ループする。

  上記 1. を実現するため、http(s) モジュールを使用する場合は fixup モジュールを
  次のように require してください。

    - http モジュールを使用する場合：

          require('fixup')('http');     // http を require する直前に追記
                                        // http モジュールを修理する、の意
          var http = require('http');

    - https モジュールを使用する場合：

          require('fixup')('https');    // https を require する直前に追記
                                        // https モジュールを修理する、の意
          var https = require('https');

  この記述をすると IoT.js オリジナルの送信関数が置き換えられます。

                                                                        以上
