マイコン用GUIライブラリ emWin Graphical API

執筆中....................

## emWinの初期化
2.7
　次の機能はemWinの初期化のためにコンフィグレーション処理を始めるために使われます．デイニシャルは，内部データを廃棄し，メモリを解放するために使われます．


Routine Description
`GUI_Init()`： emWinの内部データの構造と値を初期化します．
`GUI_IsInitialized()`： emWinの初期化されているかどうかを返します．
`GUI_Exit()`： メモリからemWinの内部データを解放します．再び`GUI_Init()`を呼べるようにします．

コード例
　emWinの初期化については，Hello worldのサンプル・プログラムを参照ください．

### GUI_Init()
Description
　emWinの内部データ構造と値を初期化します．

シグネチャ
int GUI_Init(void);

返値
= 0：　成功の場合
≠ 0：　ディスプレイ・ドライバの初期化が失敗

追加情報
 emWinの関数を使う前に必ずこの関数を実行する必要があります．

The only exception is setting create flags for windows (see WM_SetCreateFlags()).
ウィンドウ・マネージャが使われているとGUI_Init()によってバックグラウンド・ウィンドウが作られます．GUI_Init()が呼ばれる前にcreateフラグを立てると，それに従ってバックグラウンド・ウィンドウが作られます．

### GUI_IsInitialized()
Description
　emWinの初期化状態を返します．

シグネチャ
int GUI_IsInitialized(void);

返値
1 emWinが初期化済みの場合
0 初期化されていない場合

### GUI_Exit()
Description
　GUI_Init()を再度呼ぶために，メモリ上から関連するデータを開放します．

シグネチャ
void GUI_Exit(void);

追加情報
　この機能はemWinが断続的に使われるアプリケーションにおいて，emWinをOnにしたりOffにしたりできるようにします．
　`GUI_Exit()`が呼ばれた後は，再び`GUI_Init()`が呼ばれるまで，emWinは正しく機能しません．

### ターゲット・デバイスに合わせたemWinの使い方
　これから紹介するのは，アプリケーションでemWinを使うための基本的なアウトラインです．
　以下に概要を示します．
#### ステップ1：emWinの設定
　最初のステップは通常，emWinのカスタマイズです． 
　設定の詳細は後述します．

#### ステップ2：アクセス・アドレス/アクセス関数の定義
　メモリ・マップド・ディスプレー・コントローラでは，ディスプレー・コントローラの設定ファイルの中でアクセス・アドレスが定義されていなければなりません．

　ディスプレイ・コントローラにアクセスするポートやバッファのために，インターフェースとなる処理を定義する必要があります．必要な処理のサンプルは`Sample\LCD_X_Port`で見つけられます．

Step 3: シングルタスク及びマルチタスク環境向けのコンパイル，リンク，テストのemWinのサンプルコードがあります．これらは十分用意されています．

Step 4: サンプル・プログラムの修正
サンプル・プログラムに小さな修正をして下さい．テキスト描画やサイズ変更，線の描画などの追加コマンドを試して下さい．

Step 5: マルチタスク・アプリケーションの場合:必要なら使用するOSに合わせて，ディスプレイに複数のタスクが同時アクセス可能にするなら，GUI_MAX-TASKとGUI_OSマクロが必要です．GUITask.cと同じように
詳細及び設定例は設定の章を参照してください．

Step 6: emWinを使ってご自分のアプリケーションを書いて下さい
今やemWinの使い方が分かったでしょう．あなたのアプリケーションが取るべき構造に合わせて，emWinの関数を使って下さい．
 このマニュアルの後の章ではemWinの機能と設定マクロについて参照できます．

## Hello World
　次に，“Hello world”サンプル・プログラムを示します．幅広いemWinのサンプル・アプリケーションを見ることをお望みであればemWinのサンプル・フォルダ（Sample folder），もしくはwww.segger.com.の“emWin Samples”セクションを見てください．
　“Hello world”プログラムは，昔からCプログラミングのはじめの一歩として使われてきました．本質的にシンプルに記述できるプログラムだからです．
　emWinの“Hello world”プログラムを下に示します（BASIC_HelloWorld.c）．emWinの`Sample\Tutorial`フォルダに入っています．
　このプログラムの目的は，画面の左上にHello worldと書くことです．これができるようになるために，ハードウェア・コントローラ，ディスプレー・コントローラ，GUIを初期する必要があります．
emWinは，プログラムの初めでGUI_Init()を呼ぶことで初期化されます．このサンプルでは，ハードウェアはすでに初期化しれていると想定しています．

```BASIC_HelloWorld.c
#include "GUI.h"
void MainTask(void) {
  GUI_Init();
  GUI_DispString("Hello world!");
  while(1);
}
```

　最初の"Hello world"プログラムに機能を追加することは，今の所必要ないでしょうが，機能性を少し広げることができます．画面に“Hello world”と表示した後，ディスプレイがどのくらいの速さで出力できるかを見るために，ディスプレイ上で数字をカウントします．メイン・プログラムのループの最後の所に少しコードを追加します．これはディスプレイに10進数で値を表示する関数です．このサンプル・プログラムは，サンプル・フォルダにBASIC_Hello1.cとして入っています．

```BASIC_Hello1.c
#include "GUI.h"
void MainTask(void) {
  int i = 0;
  GUI_Init();
  GUI_DispString("Hello world!");
  while(1) {
    GUI_DispDecAt( i++, 20,20,4);  //座標20, 20の位置にiを10進数扱いで描画
    if (i > 9999) {
      i = 0;
    }
  }
}
```

# チャプター3
 
設定

emWinをターゲット・システムで使えるようにするため，ソフトウェアの設定が必要です．
設定は，通常はConfigディレクトリにあるコンフィグレーション・ファイルを編集して行います．コンフィグレーションは可能な限り簡素になるようにしていますが，システムが正しく機能するために修正を必要とする場合もあります．
次の事項は設定が必要です

• emWinが使うメモリ領域
• 描画で使われるディスプレイ・ドライバ
• カラー変換処理
• ディスプレイ・コントローラ初期化処理
• ハードウェア・アクセラレーション
• ハードウェアJPEGデコーディング

　emWinの初期化については後続の章を参照して下さい．

## 設定が必要な事項
設定は基本的に2つのパートに分けられます．GUIコンフィグレーションとLCDコンフィグレーションです．
　GUIコンフィグレーションは，設定が可能なデフォルト・カラーやフォント，有効メモリを設定します．
　LCDコンフィグレーションの設定は，さらにハードウェアに関わることで，ディスプレイのサイズやディスプレイ・ドライバ，カラー変換処理です．
　カラー変換処理（カラー・コンバージョン）の詳細についてはカラーのチャプターを参照して下さい．
If a hardware is used which offers acceleration features as for example available with the ChromeART accelerator of some of the STM32 devices, the chapter Hardware acceleration on page 125 contains more information.
A further part is configuring the simulation. But this is not required for the target hardware and not part of this chapter. For details about configuring the simulation, refer to the chapter Simulation on page 155.

## ランタイムとコンパイル・タイム設定
　設定するCファイルとインクルードファイルがあります．ヘッダ・ファイルの設定はコンパイル時に固定され変更できませんが，Cで行われた構成は実行時に変更できます．構成にほとんど依存せず，任意のディスプレイおよび任意のドライバで使えるライブラリを作成できます． これには，この章で説明する構成処理が，ライブラリの一部ではなくアプリケーションの一部である必要があります．

## emWinの初期化処理
　アプリケーションがemWinを初期化するために必要なことはGUI_Init()を呼ぶことだけです．
以降では，初期化処理の内部で行われていることを説明します．

`GUI_X_Config()`
　メモリがemWinに確実に割り当てられるよう，初期化処理の初めの方で呼ばれます．この処理の中でメモリブロックをemWinに割り当てるため，GUI_ALLOC_AssignMemory()が呼ばれなければなりません．この関数については，この章の後半で説明します．

`LCD_X_Config()`
　この関数はGUI_X_Config()の後ですぐに呼ばれます．
この関数の主な目的はディスプレイ・ドライバを作る事と，カラー変換処理を選ぶ事です．さらに画面サイズの設定も行います．タッチパネルが使われる場合，ここで設定されます．

`LCD_X_DisplayDriver()`
　初期化処理の後半で，LCD_X_DisplayDriver()関数が呼ばれます．ディスプレイ・ドライバから直接呼ばれます．初期化処理中にディスプレイ・コントローラを処理に入れます．この処理の詳細はこの章の後を参照して下さい．

## ランタイム・コンフィグレーション
　サブフォルダのConfigに入っているランタイム・コンフィグレーション可能なものを以下の表に示します．

Configuration file | Purpose
---|---
GUIConf.c | 有効なメモリのコンフィグレーション
LCDConf.c | ディスプレイサイズ, ディスプレイ・ドライバ，カラーコンバージョンのコンフィグレーション
SIMConf.c | シミュレーションのコンフィグレーション(ほかの章)
GUI_X.c | タイミング処理のコンフィグレーション

### GUIConf.cのカスタマイズ
このモジュールの目的は，emWinのGUI_X_Config()がメモリ・マネジメントシステムからメモリをアサインされるようすることです．
このためには，使用するコンポーネントがメモリをどの程度必要とするか知らなければなりません．
　リソースの使い方と性能の章で，emWinモジュールそれぞれが必要なメモリ(RAMとROM)について詳しく解説しています．
Per default GUIConf.c is located in the (sub)directory and contains the routine GUI_X_Config() which is responsible to assign a memory block to emWin. It is not cogently required to leave it in the file GUIConf.c. 
GUI_X_Config()の処理はアプリケーション内の任意の場所に配置できます．
この関数を呼ぶことは初期化処理のかなり初めの方で終える処理です．これはメモリ・ブロックをemWinに割り当てる責任があります．このブロックは内部メモリ管理システムに管理されています． `GUI_ALLOC_AssignMemory()`の項も参照して下さい．

#### GUI_X_Config()で使われるAPI関数
`GUI_X_Config()`の中で呼ばれるAPI関数を次の表に示します．

処理 | 内容
---|---
`GUI_ALLOC_AssignMemory()` | この関数は内部メモリ管理システムで管理されたメモリをemWinに割り当てます
`GUI_RegisterAfterInitHook()` | GUIが初期化された後に呼び出されるフック関数を登録します．
`GUI_SetOnErrorFunc()` | GUI_ErrorOur()から呼び出されるフック関数を設定します GUITASK_GetMaxTask()` | マルチタスクが有効な時の最大タスク数を返します．
`GUITASK_SetMaxTask()` | emWinにアクセスする最大タスク数．マルチタスク環境の時のみ．

##### GUI_ALLOC_AssignMemory()
Description
emWinに1つだけ，内部メモリ管理システムで使われるメモリブロックを割り当てます．通常この機能は，GUI_X_Config()から呼ばれるべきです．

シグネチャ
void GUI_ALLOC_AssignMemory(void * p, U32 NumBytes);

引数

Parameter | Description
---|---
p | emWinに使われるメモリブロックのポインタ
NumBytes | メモリブロックのサイズ（バイト単位）

追加情報
アプリケーションからメモリブロックの領域全てを使うことはできません．管理システム自体が少しのメモリを使うからです.それぞれのメモリブロックは8，16，32ビットごとにアクセス可能でなければなりません．それはメモリ割り当てのため，emWinに内部的に使われます．malloc()やfree()を使う代わりに内部メモリ管理は，メモリ割り当てにそれを使います．フレームバッファには使われません．

##### GUI_RegisterAfterInitHook()
Description
　GUIが初期化された後呼ばれるフック関数を登録します．

シグネチャ
`void GUI_RegisterAfterInitHook(void ( *pFunc)(), GUI_REGISTER_INIT* RegisterInit)`;

引数

引数 | 内容
---|---
pFunc | 関数のポインタ
pRegisterInit | GUI_REGISTER_INIT構造体へのポインタ

追加情報
GUIが初期化された後呼ばれる関数として，複数の関数を設定できます．
それぞれの関数のためのGUI_REGISTER_INIT構造体が必要です．

```
static void _Init0(void) {
}
static void _Init1(void) {
}
void GUI_X_Config(void) {
static GUI_REGISTER_INIT RegisterInit0;
static GUI_REGISTER_INIT RegisterInit1;

static U32 aMemory[GUI_NUMBYTES / 4];
GUI_ALLOC_AssignMemory(aMemory, GUI_NUMBYTES);
GUI_SetDefaultFont(&GUI_Font6x8);
GUI_RegisterAfterInitHook(_Init0, &RegisterInit0);
GUI_RegisterAfterInitHook(_Init1, &RegisterInit1);
}
```

##### GUI_SetOnErrorFunc()
Description
GUI_ErrorOur()から呼ばれるフック関数を設定する

シグネチャ
`void GUI_SetOnErrorFunc(void ( *pFunc)(const char* s ))`;

引数

引数 | 内容
---|---
pFunc | GUI_ErrorOut()から呼ばれるフック関数のポインタ

追加情報
　フック関数は引数として渡される文字列で，エラーを表す短い文字列を受け取ります．
それはエラーの起こったモジュールや関数の情報を含みます．
GUI_ErrorOut()の解説も参照してください．

##### GUITASK_GetMaxTask()
Description
マルチタスクが有効な時の，最大タスク数を返します．

シグネチャ
`int GUITASK_GetMaxTask(void)`;

返値
　最大タスク数

##### GUITASK_SetMaxTask()
Description
マルチタスクが有効な時のemWinにアクセスできる最大タスク数

シグネチャ
`void GUITASK_SetMaxTask(int MaxTask)`;

引数

引数 | 内容
---|---
MaxTask | 最大タスク数

追加情報
　この関数はGUI_X_Config()から呼ばれることを想定しています．
プリ・コンパイル・ライブラリを用いるなら，この関数の使用は必須です．

GUI_MAXTASKも定義可能です．詳しくはGUI_MAXTASKの項を参照してください．

### LCDConf.cのカスタマイズ
このモジュールの目的はemWinに必要なディスプレイ・コンフィグレーション処理とディスプレイ・ドライバ用のコールバック関数を提供することです．
以下の機能があります．

関数 | 説明
LCD_X_Config() | ディスプレイ・ドライバを生成するためのコンフィグレーション処理．ディスプレイ・サイズとカラー・コンバージョン処理を設定する
LCD_X_DisplayDriver() | ディスプレイ・コントローラに処理を伝えるディスプレイ・ドライバに呼ばれるコールバック関数

#### LCD_X_Config()
Description
前述の表の通り，ディスプレイ・ドライバを生成します．
ディスプレイの物理サイズと正しいカラー・コンバージョンを設定します．

シグネチャ
`void LCD_X_Config(void)`;

追加情報
　使用するディスプレイ・ドライバに依存しますが，ビデオRAMのアドレスも必要です．カスタム・パレットのようなものを初期化してください．ほかに必要な情報はディスプレイ・ドライバのページを参照してください．この関数でコンフィグレーション可能な機能は，この章で解説しています．

Example
典型的な実装例を示します:

```
//
// Set display driver and color conversion for 1st layer
//
GUI_DEVICE_CreateAndLink(GUIDRV_LIN_16, GUICC_565, 0, 0);
//
// Display driver configuration
//
LCD_SetSizeEx    (0, 320, 240);
LCD_SetVSizeEx   (0, 320, 240);
LCD_SetVRAMAddrEx(0, (void *)0x200000);
```

#### LCD_X_DisplayDriver()
Description
ディスプレイ・ドライバ用のコールバック関数です．コールバック関数へコマンドと構造体データへのポインタを渡します．
　コマンドはコールバック関数に何をするべきかを伝えます．コマンドがパラメータを必要とする場合，それらはポインタpDataとして渡されます．コマンドによって異なる構造体データのポインタです．

シグネチャ
`int LCD_X_DisplayDriver(unsigned LayerIndex, unsigned Cmd, void* pData)`;

引数

引数 | 内容
---|---
LayerIndex | レイヤー・インデックス．0が起点
Cmd | 実行されるコマンド．詳細は下記を参照
pData | データ構造体へのポインタ

構造体LCD_X_SETVRAMADDR_INFOの要素

Data type | Element Description
---|---
void * pVRAM | ビデオRAMのスタート・アドレスへのポインタ

返値

追加情報
　ディスプレイ・ドライバによってこの処理に渡されるコマンドについての詳細は，ディスプレイ・ドライバの章を参照してください．

例
　この処理に関して，Sample\LCDConfフォルダに，手始めに見るべきたくさんの実装例があります．

#### API functions to be used in LCD_X_Config()
　LCD_X_Config()の中でコンフィグレーションに使われるAPIの機能を次の表に示します．

処理 | 内容
---|---
GUI_DEVICE_CreateAndLink() | ディスプレイ・ドライバを作り，カラーコンバージョンを設定
GUI_TOUCH_SetOrientation() | タッチスクリーンの方向を設定
GUI_TOUCH_Calibrate() | Changes the calibration at runtime.
LCD_SetLUTEx() | 与えられたレイヤー用のルックアップ・テーブルを設定
LCD_SetSizeEx() | ディスプレイ/レイヤーの物理的なサイズを設定
LCD_SetVRAMAddrEx() | ビデオRAMのアドレスを設定
LCD_SetVSizeEx() | 仮想ディスプレイのサイズを設定

LCD_SetLUTEx()関数は別として，名称にLCDと付く関数の詳細はディスプレイ・ドライバの章にあります
GUI_TOUCH_…()関数については，タッチ・スクリーン・ドライバの項で見つけられます．

##### GUI_DEVICE_CreateAndLink()
Description
この処理はディスプレイ・ドライバを作ります．
This routine creates the display driver device, sets the color conversion routines to be used for accessing the display and it links the driver device into the device list of the given layer.
GUI_X_Config()の後，LCD_X_Config()はただちに呼び出されます．これによってメモリ・コンフィグレーションが終わり，ドライバがメモリを割り当てられている状態になります．


ディスプレイ・ドライバに必要なメモリは約50バイト＋各々のドライバが必要とする量です．
それぞれのディスプレイ・ドライバが必要とするメモリの量についての詳細は，ディスプレイ・ドライバの章を参照してください．

シグネチャ
GUI_DEVICE *GUI_DEVICE_CreateAndLink(const GUI_DEVICE_API* pDeviceAPI, const LCD_API_COLOR_CONV * pColorConvAPI, U16 Flags, int LayerIndex);

引数

引数 | 内容
---|---
pDeviceAPI | ディスプレイ・ドライバのポインタ．ディスプレイ・ドライバの章に有効なディスプレイ・ドライバのリストがあります．
pColorConvAPI | カラーコンバージョン処理へのポインタ．カラーの章にカラーコンバージョン処理のリストがあります．
Flags | 通常はゼロ
LayerIndex | ドライバに管理されるレイヤー

返り値
　通常は，作られたドライバ・オブジェクトを返します．そうでなければNULLを返します．

追加情報
　ドライバがディスプレイの向きを決める場合もあります．ドライバによって異なります．ディスプレイの向きの詳細はディスプレイ・ドライバの章を参照して下さい．

### GUI_X.cカスタマイズ
　このファイルはタイミング処理の中にあります．
デバッグ処理とカーネル・インターフェース処理：

#### Timing routines

##### GUI_X_Delay()
Description
　指定した時間が経過したら処理を戻します（ミリ秒）．

シグネチャ
void GUI_X_Delay(int Period);

引数

引数 | 内容
---|---
Period | ミリ秒単位で時間を指定

##### GUI_X_ExecIdle()
Description
　ウィンドウ・マネージャの非ブロック関数からのみ呼ばれます．

シグネチャ
void GUI_X_ExecIdle(void);

追加情報
 すでに処理を必要とするメッセージがない時に呼ばれます．この場合GUIは最新状態です．

##### GUI_X_GetTime()
Description
　GUI_GetTime()を使って，現在のシステム時間を取得できます（ミリ秒）．

シグネチャ
GUI_TIMER_TIME GUI_X_GetTime(void);

返値
　integerで現在のシステムタイム（ms単位）を返す

#### Debug routines

##### GUI_X_ErrorOut()

##### GUI_X_Warn()

##### GUI_X_Log()
Description
　これらの処理は，デバッグ・レベルが高い時に，問題や問題の可能性が検出されるとemWinからデバッグ情報を伴って呼ばれます．処理は空の場合もあります．emWinの機能を必要としません．
ターゲット・システムにおいて，通常release (production) buildを必要としません，production buildは通常，低いデバッグ・レベルを使うからです．

• Fatal errors are output using GUI_X_ErrorOut() if (GUI_DEBUG_LEVEL ≥ 3)
• Warnings are output using GUI_X_Warn() if (GUI_DEBUG_LEVEL ≥ 4)
• Messages are output using GUI_X_Log() if (GUI_DEBUG_LEVEL ≥ 5)

シグネチャ
void GUI_X_ErrorOut(const char * s);
void GUI_X_Warn(const char * s);
void GUI_X_Log(const char * s)

引数

引数 | 内容
---|---
s | 送られる文字列へのポインタ

追加情報
　この処理はエラーメッセージやワーニングを送信するためemWinから呼ばれます．ロギングが有効な場合には必要になります．
　GUIは，コンフィグレーション・マクロGUI_DEBUG_LEVELにしたがってこの関数を呼びます．
次の表にGUI_DEBUG_LEVELの値を示します．

値 | シンボルと説明
---|---|---
0 | GUI_DEBUG_LEVEL_NOCHECK|  チェックは行われません
1 | GUI_DEBUG_LEVEL_CHECK_PARA | クラッシュを防ぐためパラメータをチェックします (Default for target system)
2 | GUI_DEBUG_LEVEL_CHECK_ALL | パラメータ・チェックと一貫性チェックを行います
3 | GUI_DEBUG_LEVEL_LOG_ERRORS | エラーは記録されます
4 | GUI_DEBUG_LEVEL_LOG_WARNINGS | エラーとワーニングが記録されます(Default for PC-simulation)
5 | GUI_DEBUG_LEVEL_LOG_ALL | エラー，ワーニング，メッセージは記録されます

#### カーネル・インターフェース処理
　これらの処理の詳細は実行モデル，シングルタスク/マルチタスクのページで見つけられます．

### Function replacement
　下記の表にAPI関数を示します．これらは一般的な目的のカスタム定義関数で有効です

Routine | Description
---|---
GUI_SetpfMemcpy() | カスタム機能を設定．memcpy処理用
GUI_SetpfMemset() | カスタム機能を設定．memset処理用
GUI_SetpfStrcmp() | カスタム機能を設定．文字列比較処理用
GUI_SetpfStrcpy() | カスタム機能を設定．文字列コピー用.
GUI_SetpfStrlen() | カスタム機能を設定．文字列の長さ取得用

#### GUI_SetpfMemcpy()
Description
memcpy処理用にカスタム機能を設定します．

シグネチャ
void GUI_SetpfMemcpy(void * ( *pFunc)(void * pDest, const void * pSrc, size_t Cnt ));

引数

引数 | 内容
---|---
pFunc | 使われる関数

#### GUI_SetpfMemset()
Description
memset用にカスタム関数を設定する
シグネチャ
void GUI_SetpfMemset(void * ( *pFunc)(void * pDest, int c, size_t Cnt ));

引数

引数 | 内容
pFunc | 呼ばれる関数

#### GUI_SetpfStrcmp()
Description
文字列比較用にカスタム関数を設定する

シグネチャ
void GUI_SetpfStrcmp(int ( *pFunc)(const char *, const char * ));

引数

引数 | 内容
---|---
pFunc | 呼ばれる関数

#### GUI_SetpfStrcpy()
Description
文字列コピー用にカスタム関数を設定する

シグネチャ
void GUI_SetpfStrcpy(char * ( *pFunc)(char *, const char * ));

引数

Parameter | Description
---|---
pFunc | 使われる関数

#### GUI_SetpfStrlen()
Description
文字列の長さ取得用にカスタム関数を設定する

Prototype
void GUI_SetpfStrlen(size_t ( *pFunc)(const char * ));

引数

引数 | 内容
---|---
pFunc | 使われる関数

## コンパイル時コンフィグレーション
　サブフォルダConfigにあるコンパイル時のコンフィグレーション用ファイルの一覧を下記の表に示します．
Configuration

ファイル | 目的
---|---
GUIConf.h | 使用可能なレイヤーの数のコンフィグレーション，デフォルト・フォント，カラーなどの機能(e.g. Widgets)
LCDConf.h | ディスプレイ・ドライバのコンフィグレーション

　プリコンパイルされたemWinライブラリを用いる場合， 変更されたコンフィグレーション・ファイルは，必要な設定でライブラリが再びコンパイルされるまで効果を発揮しません．これは以降で説明するもの全てに当てはまります．

### GUIConf.hのカスタマイズ
上で述べられているファイルは，デフォルトフォントと有効な機能に関するコンフィグレーションを含む必要があります．各々のemWinのパッケージにはGUIConf.hファイルが付いてきます．これには，始める時にまず試すべき基本のコンフィグレーション・ファイルがあります．

#### emWinの機能のコンフィグレーション
　以下の表にコンフィグレーション・マクロを示します．

Type | Macro | Default | Description
---|---|---|---
B | GUI_OS | 0 | マルチタスク・サポートを有効にし，マルチタスク環境からemWinを呼び出せるようにする (実行モデルの章を参照: シングルタスク / マルチタスク).
B | GUI_SUPPORT_CURSOR (see expl.) | | Per default cursors are enabled if either GUI_SUPPORT_TOUCH or GUI_SUPPORT_MOUSE has been enabled. If cursors should be shown without enabling one of these options it should be set to 1.
B | GUI_SUPPORT_MEMDEV | 0 | オプションのメモリデバイス・サポートを有効にする
B | GUI_SUPPORT_MOUSE | 0 | オプションのマウス・サポートを有効にする
B | GUI_SUPPORT_ROTATION | 1 | テキスト回転を有効にする
B | GUI_SUPPORT_SPY | 0 | emWinSPYを有効にする
B | GUI_SUPPORT_TOUCH | 0 | オプションのタッチスクリーン・サポートを有効にする
T | GUI_TIMER_TIME | int | Defines the type which is used for time values by the emWin Timer functionality.
B | GUI_WINSUPPORT | 0 | オプションのウィンドウマネージャ・サポートを有効にする
B | GUI_SUPPORT_BIDI | 1 | qEnables BiDi support for emWin. Set to 0 if not reuired and to save some ROM.

#### デフォルト・フォント，デフォルト・カラーのコンフィグレーション
　次の表にコンフィグレーション・マクロを示します．

Type | Macro | Default | Description
---|---|---|---
N | GUI_DEFAULT_BKCOLOR | GUI_BLACK | デフォルトのバックグラウンド・カラー
N | GUI_DEFAULT_COLOR | GUI_WHITE | デフォルトのフォアグラウンド・カラー
S | GUI_DEFAULT_FONT | &GUI_Font6x8 | GUI_Init()の後，デフォルトフォントとして使用されるフォント．デフォルトフォントを使わないのであれば，デフォルトフォントの設定を変えた方がよいでしょう

Type Macro Default Description
デフォルトフォントはコードから参照され，常にリンクされます．GUI_SetDefaultFont()も参照してください．デフォルトフォントのランタイム・コンフィグレーションとして使用されます．
オプションのウィンドウマネージャのウィジェットのデフォルト・カラーやフォントは変更できます．詳しくはWidgets (window objects)の章を参照してください．

#### Advanced GUI configuration options
次の表はコンフィグレーション・マクロを示します

Type | Macro | Default | Description
---|---|---|---|---
S | GUI_DEBUG_LEVEL | 1 (target)，4 (simulation) | デバッグレベルの定義は，emWinが，どの程度チェックを行い，エラー，ワーニング，メッセージを出力するかを指定します．デバッグレベルを上げると，コードサイズも大きくなります．
N | GUI_MAXTASK 4 | マルチタスクがサポートされている場合，ディスプレイにアクセスするために，emWinを呼び出せるタスクの最大数．(see the chapter Execution　Model: シングルタスク / マルチタスク）
F | GUI_MEMCPY | memcpy | このマクロはmemcpy関数の交換を許可します
F | GUI_MEMSET | memset | このマクロはmemset関数の交換を許可します
N | GUI_NUM_LAYERS | 1 | レイヤ/ディスプレイの最大数を設定する
F | GUI_POST_INIT | - | GUI_Init()の最後に呼び出す関数の定義
B | GUI_TRIAL_VERSION | 0 | Marks the compiler output as evaluation version.
B | GUI_WINSUPPORT | 0 | ウィンドウマネージャのサポート
N | GUI_PID_BUFFER_SIZE | 5 | pMaximum 入力バッファに管理されるPIDイベントの最大数
N | GUI_KEY_BUFFER_SIZE | 10 | pMaximum 入力バッファに管理されるキー・イベントの最大数

##### GUI_MEMCPY (obsolete)非推奨
Note
GUI_SetpfMemcpyを参照して下さい．
GUIのmemcpy関数の置き換えを可能にします．多くのシステムにおいてmemcpyの処理には，最適化が行われておらず時間がかかります．emWinは32ビットCPUに最適化された，代わりのmemcpy処理を持っています．多くのシステムでこのルーチンは，デフォルトの処理より速いコードを生成します．
しかしながら， これはまだ一般的な処理であり，特定のCPU向けにさらに適したコードや，アセンブラによる最適なコードがあり得ます．
emWinの処理を最適化するために，以下の定義をGUIConf.hファイルに追加してください．
#define GUI_MEMCPY GUI__memcpy

##### GUI_MEMSET (obsolete)非推奨
Note
Please refer to GUI_SetpfMemset on page 118.
This macro allows replacement of the memset function of the GUI. On a lot of systems, memset takes up a considerable amount of time because it is not optimized by the compiler manufacturer. We have tried to address this by using our own memset() Routine GUI__memset. However, this is still a generic C routine, which in a lot of systems can be replaced by faster code, typically using either a different C routine, which is better optimized for the particular CPU, by writing a routine in Assembly language or using the DMA.
もし，memsetの替りに独自の処理を行いたいのならGUIConf.hに定義を追加してください．

##### GUI_POST_INIT
GUIが完全に初期化された後に呼ばれる関数．
マクロとして次のように定義します．

follows:
例

#define GUI_POST_INIT CustomFunction();

##### GUI_TRIAL_VERSION
コンパイラ出力にテストビルドの印をつけるために使われるマクロです．サードパーティへ提供されるサンプルビルドの場合に，定義するべきです（典型的には評価ボードの場合）．
これには特別なライセンスが必要です．
emWinのソースコードやオブジェクト・コード (relinkable)の再配布は通常のライセンスでは許可されません．
必用であればsales@segger.comにご連絡ください．
GUI_TRIAL_VERSIONが定義されている場合，GUI_Init()を呼んだ時に以下のメッセージが表示されます．

このメッセージは常にディスプレイの左上に1秒間表示されます．時間はGUI_X_Delay(1000)で設定されます．このスイッチが有効でもemWinの機能は制限されることはありません．

#define GUI_TRIAL_VERSION 1

### LCDConf.hのカスタマイズ
このファイルにはディスプレイドライバのコンパイルに必要とされるもので，動的な変更の必要ない全般的なコンフィグレーションを含みます．
 有効なコンフィグレーションの内容は使用するディスプレイ・ドライバに依存します．詳細はディスプレイドライバの章を参照して下さい．詳細なドライバについての記述の中に，それぞれのドライバ向けの有効なコンフィグレーションについての記述を含みます．

## ハードウェア・アクセラレーション
STM32F4デバイスのChromeARTなどのように，CPUやLCDコントローラがハードウェア・アクセラレーション機能を持っているなら  描画処理にそれらを使用します．使用するハードウェア・アクセラレータの種類によってやりかたは異なります．
次の表に，アクセラレータの機能の大まかな分類を示します．

グループ 目的

カラーコンバージョン

ChromeARTの様な幾つかのハードウェアはカラー・コンバージョン機能を提供します．あるフォーマットから別なフォーマットへ変換できます．たくさんのカラーコンバージョン処理のために，カラーコンバージョンのハードウェア処理機能が提供されます．

Fill, copy and bitmap
drawing

LCD_SetDevFunc()を使ってカスタム描画機能を使うことでそれらの操作はアクセラレートされます．
アルファブレンディング機能は，フォア・グラウンドとバック・グラウンドとして与えられた色をアルファ値を使って混ぜるのに使われます．
ミキシング・カラー機能はフォア・グラウンドとバックグラウンドとして与えられた色を与えられた強さに従って混ぜるのに使われます．
Alpha text drawing（アルファ・テキスト描画）はカスタム関数を設定するとアンチエイリアス・テキストを得られます
Palette conversion ビットマップ・パレットのコンバージョンはカスタム関数で行われます．
Drawing bitmaps with in memory devices

幾つかの内部メモリデバイスでの処理はカスタム関数での設定によってアクセラレートされます．

### ChromeARTアクセラレータの使用
3.6.1
STM32F429とSTM32F439のChromeARTアクセラレータのほとんど全ての機能がemWinで使用可能です．
一度正しいコンフィグレーションをすれば多くの描画処理が劇的に速くなります．emWinのサンプルフォルダにChromeARTアクセラレータの機能を使うコンフィグレーション・ファイルがあります．このサンプルはSample\LCDConf\GUIDRV_Lin\STM32F429にあります．このサンプルはドライバGUIDRV_Linがライセンスされている場合のみ有効です．

### Available API functions
次の表に有効な処理を示します．

処理 | 内容
カラー・コンバージョン
GUICC_M1555I_SetCustColorConv()
GUICC_M565_SetCustColorConv()
GUICC_M4444I_SetCustColorConv()
GUICC_M888_SetCustColorConv()
GUICC_M8888I_SetCustColorConv()

固定のパレットモードに応じてカスタムのカラー・コンバージョン処理を設定してください．

Filling, copy operations and bitmap drawing LCD_SetDevFunc() The function sets additional and / or user defined functions of the display driver.

Alpha | blending
---|---
GUI_AlphaEnableFillRectHW() | 透明色での矩形の塗りつぶしを有効にする
GUI_SetFuncAlphaBlending() | アルファ・ブレンディング処理のためのカスタム定義関数を設定する
GUI_SetFuncDrawAlpha() | Sets two custom routines for drawing memory devices with alpha value into an

Routine Description
other memory device and for drawing a bitmap with alpha value.
Mixing colors

GUI_SetFuncMixColors()

単一のバックグラウンド・カラーと与えられたカラーとを指定した強さで混ぜるカスタム定義関数を設定する
GUI_SetFuncMixColorsBulk() バルク・ブレンディング処理のためのカスタム定義関数を設定する
アルファ・テキスト描画（Alpha text drawing）

GUI_AA_SetpfDrawCharAA4()

ピクセルあたり4ビットのアルファブレンディング文字を描画するカスタム定義関数を設定する
パレット・コンバージョン（Palette conversion）

GUI_SetFuncGetpPalConvTable()

カスタム関数へのポインタを設定するnction，これは色の配列をインデックス値の配列に変換する．
メモリデバイスでビットマップを描画する
GUI_MEMDEV_SetDrawMemdev16bppFunc() sSets a custom function for the above decribed job.