マイコン工作実験日記

Microcontroller を用いての工作、実験記録

Hello EVEを表示する

2013-09-15 00:19:34 | LCD
FT800 EVEのサンプルデモがほぼ動いたので、今度はFT800の機能を理解しながら、自分でプログラムを書き始めることにしようと思います。まずは Hello Worldの代わりに、Hello Eve!と表示してみました。



この表示を行うための中心部分のコードは、こんな感じです。
/* Text widget test */
void do_Text(Ft_Gpu_Hal_Context_t *phost)
{
  int font, ypos;
  char buffer[40];

  Ft_Gpu_CoCmd_Dlstart(phost);
  Ft_App_WrCoCmd_Buffer(phost,CLEAR_COLOR_RGB(0,0,0)); /* Black background */
  Ft_App_WrCoCmd_Buffer(phost,CLEAR(1,1,1));

  Ft_App_WrCoCmd_Buffer(phost,COLOR_RGB(255,255,255)); /* Text color is white */
  ypos = 10;
  for (font = 20; font <= 25; font++) {
    snprintf(buffer, sizeof(buffer), "%d: Hello Eve!", font);
    Ft_Gpu_CoCmd_Text(phost, 0, ypos, font, 0, buffer);
    ypos += 30;
  }
  ypos = 10;
  for (font = 26; font <= 31; font++) {
    snprintf(buffer, sizeof(buffer), "%d: Hello Eve!", font);
    Ft_Gpu_CoCmd_Text(phost, FT_DispWidth/2, ypos, font, 0, buffer);
    ypos += 30;
  }

  Ft_App_WrCoCmd_Buffer(phost,DISPLAY());
  Ft_Gpu_CoCmd_Swap(phost);

  /* Download the commands into fifo */
  Ft_App_Flush_Co_Buffer(phost);

  Ft_Gpu_Hal_WaitCmdfifo_empty(phost);
}

サンプルプログラムに用意されていたAPIを使って書きましたが、FT800がサポートするテキスト・ウィジェットを呼び出すためのコマンドパラメータを生成して、それをFT800にSPI経由で送り込むことで描画をおこないます。いくつかポイントを列挙しておくと、
  • FT800は内蔵フォントを持っており、フォント番号を指定してテキスト描画できる。内蔵フォントには16から31番の番号が割り当てられている。
  • フォント番号を変えるとサイズは変わるが、書体は同一。
  • 26~31番のフォントはアンチエイリアスがかかっているようだ。
  • フォントのメトリック情報も持っているので、FT800のROMにアクセスして読み出すことができる。これを利用すれば、表示されるテキストの幅や高さを調べることも可能。
  • フォント番号0~14はユーザ定義フォント用の番号。フォントデータをダウンロードして、ユーザ定義フォントを作成することができる。

日本語を表示するには、漢字フォントのデータをダウンロードしてユーザ定義フォントを作成し、それを使ってテキスト描画を行う必要があります。直接SJISやUTF-8のエンコーディグで文字列を描画することはできないので、これを実現するためのライブラリ関数を自作する必要があります。