# GR-PEACH ディスプレイモジュール (display)

`display` モジュールは、GR-PEACH 4.3inch LCD Shield に搭載された液晶の制御を行います。

- 対応するLCDは以下の通りです。
  - `"4.3inch"` - GR-PEACH 4.3inch LCD Shield

画像の出力は、マイコンに搭載されたハードウェアリソース(VDC5)を用いてプログラムとは非同期に実行されます。

## display.openLCD(config, callback)

- `config` {Object} LCDの設定
  - `type` {string} 接続するLCDの種類。`"4.3inch"`のみ指定可能。必須項目です。
- `callback` {Function} コールバック関数
  - `err` {Error|null} エラーオブジェクト(失敗のとき) または `null`(成功のとき)。
  - `lcd` {Object} `Lcd`クラスのインスタンス (成功のとき)
- 戻り値: {undefined}

LCDディスプレイに接続します。処理は非同期で行われ、処理が完了または失敗すると、コールバック関数が呼び出されます。

> 注意: ハードウェアリソースを排他で使用するため、複数の`Lcd`インスタンスを同時に使用することはできません。別のLCDに接続する場合は、先に生成されたインスタンスに対して`close()`を実行してください。

#### 使用例

    var display = require('display');
    var AlignedBuffer = require('aligned_buffer').AlignedBuffer;

    var buf1 = new AlignedBuffer(480 * 272 * 2, 32);
    var buf2 = new AlignedBuffer(480 * 272 * 2, 32);

    display.openLCD({
      type: '4.3inch'
    }, function(err, lcd) {
      if (err) {
        /* display.openLCD 失敗... */
        console.log(err);
        return;
      }
      /* display.openLCD 成功... */

      lcd.start(0, buf1, 'rgb565', function(err) {
        if (err) {
          /* lcd.start 失敗... */
          console.log(err);
          return;
        }
        /* lcd.start 成功... */

        lcd.update(0, buf2, function(err) {
          if (err) {
            /* lcd.update 失敗... */
            console.log(err);
            return;
          }
          /* lcd.update 成功... */

          lcd.stop(0, function(err) {
            if (err) {
              /* lcd.stop 失敗... */
              console.log(err);
              return;
            }
            /* lcd.stop 成功... */

            lcd.close(function (err) {
              if (err) {
                /* lcd.close 失敗... */
                console.log(err);
              }
              /* lcd.close 成功... */
            });
          });
        });
      });
    });

## display.openLCDSync(config)

- `config` {Object} LCDの設定
  - `display.openLCD()`の説明を参照。
- 戻り値: {Object} `Lcd`クラスのインスタンス

`display.openLCD()`の同期版です。処理は同期で行われ、処理が完了すると`Lcd`クラスのインスタンスを返却します。失敗すると例外をスローします。

#### 使用例

    var display = require('display');
    var AlignedBuffer = require('aligned_buffer').AlignedBuffer;

    var buf1 = new AlignedBuffer(480 * 272 * 2, 32);
    var buf2 = new AlignedBuffer(480 * 272 * 2, 32);

    try {
      var lcd = display.openLCDSync({ type: '4.3inch' });
      /* display.openLCDSync 成功... */

      lcd.startSync(0, buf1, 'rgb565');
      /* lcd.startSync 成功... */

      lcd.updateSync(0, buf2);
      /* lcd.updateSync 成功... */

      lcd.stopSync(0);
      /* lcd.stopSync 成功... */

      lcd.closeSync();
      /* lcd.closeSync 成功... */
    } catch (err) {
      console.log(err);
    }

# Lcdクラス

LCDの制御、画像データの出力を行うクラスです。

## lcd.type

- {string}
- 接続されているLCDの種類を示す、読み取り専用プロパティです。`display.openLCD()`の`config.type`に指定した値が得られます。

## lcd.width

- {number}
- 表示デバイスの横幅をピクセル数で示す、読み取り専用プロパティです。

## lcd.height

- {number}
- 表示デバイスの高さをピクセル数で示す、読み取り専用プロパティです。

## lcd.start(layer, buf, format, callback)

- `layer` {number} LCDのレイヤID。`0`～`3`の値。
- `buf` {AlignedBuffer} LCD出力するバッファ。32バイトのアライメントである必要があります。
- `format` {string} 入力画像(フレームバッファ)に用いるピクセルフォーマット。`"ycbcr422"`,`"rgb565"`,`"rgb888"`,`"argb8888"`,`"argb4444"`のいずれかが指定可能。必須項目です。
- `callback` {Function} コールバック関数
  - `err` {Error|null} エラーオブジェクト(失敗のとき) または `null`(成功のとき)。
- 戻り値: {undefined}

画像の出力を開始します。処理は非同期で行われ、処理が完了または失敗すると、コールバック関数が呼び出されます。

## lcd.startSync(layer, buf, format)

- `layer` {number} LCDのレイヤID。`0`～`3`の値。
- `buf` {AlignedBuffer} LCD出力するバッファ。32バイトのアライメントである必要があります。
- `format` {string} 入力画像(フレームバッファ)に用いるピクセルフォーマット。`"ycbcr422"`,`"rgb565"`,`"rgb888"`,`"argb8888"`,`"argb4444"`のいずれかが指定可能。必須項目です。
- 戻り値: {undefined}

`lcd.start()`の同期版です。処理は同期で行われ、処理が完了すると呼び出し元に戻ります。失敗すると例外をスローします。

## lcd.stop(layer, callback)

- `layer` {number} LCDのレイヤID。`0`～`3`の値。
- `callback` {Function} コールバック関数
  - `err` {Error|null} エラーオブジェクト(失敗のとき) または `null`(成功のとき)。
- 戻り値: {undefined}

画像の出力を停止します。処理は非同期で行われ、処理が完了または失敗すると、コールバック関数が呼び出されます。

## lcd.stopSync(layer)

- `layer` {number} LCDのレイヤID。`0`～`3`の値。
- 戻り値: {undefined}

`lcd.stop()`の同期版です。処理は同期で行われ、処理が完了すると呼び出し元に戻ります。失敗すると例外をスローします。

## lcd.update(layer, buf, callback)

- `layer` {number} LCDのレイヤID。`0`～`3`の値。
- `buf` {AlignedBuffer} LCD出力するバッファ。32バイトのアライメントである必要があります。
- `callback` {Function} コールバック関数
  - `err` {Error|null} エラーオブジェクト(失敗のとき) または `null`(成功のとき)。
- 戻り値: {undefined}

LCDに表示するフレームバッファを更新（置き換え）します。 フレームバッファは`lcd.start()`の`format`で指定したフォーマットである必要があります。 処理は非同期で行われ、処理が完了または失敗すると、コールバック関数が呼び出されます。

## lcd.updateSync(layer, buf)

- `layer` {number} LCDのレイヤID。`0`～`3`の値。
- `buf` {AlignedBuffer} LCD出力するバッファ。32バイトのアライメントである必要があります。
- 戻り値: {undefined}

`lcd.update()`の同期版です。処理は同期で行われ、処理が完了すると呼び出し元に戻ります。失敗すると例外をスローします。

## lcd.close(callback)

- `callback` {Function} コールバック関数
  - `err` {Error|null} エラーオブジェクト(失敗のとき) または `null`(成功のとき)。
- 戻り値: {undefined}

画像出力に関するハードウェアリソースを解放します。`lcd.start()`により画像の出力が開始されている場合、この関数の内部で自動的に`lcd.stop()`が呼び出されて停止されます。処理は非同期で行われ、処理が完了または失敗すると、コールバック関数が呼び出されます。

> 注意: この関数を呼んだ後には、この`Lcd`インスタンスに対していかなる操作も行えません。このとき各プロパティの返す値は未定義であり、各関数の呼び出しを行うとエラーが発生します。

## lcd.closeSync()

- 戻り値: {undefined}

`lcd.close()`の同期版です。処理は同期で行われ、処理が完了すると呼び出し元に戻ります。失敗すると例外をスローします。