BS21 Lab の製品 - カラー漢字 LCD シールド - カラー漢字 LCD ライブラリの解説

2/sep/2013 新規
13/feb/2014 更新


工事中。

まだ、書ききれていません。


カラー漢字 LCD ライブラリの解説です。

※ 現時点では、Arduino Due には対応できていません。(Arduino IDE 1.5.5 の Wire ライブラリの不備の為)

  1. i2c 関係
  2. ワイド文字列とは
  3. サポートしている機能

・i2c 関係

「カラー漢字 LCD ライブラリ」は、Wire ライブラリを使用していますので、以下の様に先に include してください。

// TWI 通信用ライブラリ:必須です
#include <Wire.h>

// カラー漢字 LCD 用ライブラリ
#include <ColorKanjiLCD.h>

「カラー漢字 LCD ライブラリ」では、Wire と記述しておらず、CKLCD_Wire と記述してあります。 CKLCD_Wire は Arduino Due では Wire1 を、それ以外では Wire を使用する様にするためのマクロです。

通常、Arduino では TWI(i2c) 通信の速度は 100kbit/s ですが、CKLCD_Wire_setHiSpeed 関数で 強制的に 400kbit/s にできます(CPUクロック=8MHz の時は 200kbit/s)。
ただし、「カラー漢字 LCD シールド」以外に TWI 通信機器を接続している場合、そちらも 400kbit/s の速度に対応しているか、御確認ください。


・ワイド文字列とは

Arduino IDE では、通常の文字列("〜"と書かれている物)とは別に、ワイド文字列(L"〜"と書かれている物)というのが存在します。
通常の文字列では、ASCII は1文字1バイトですが、日本語(半角カナも含む)は1文字3バイトと、メモリ効率が悪くなります。 一方、ワイド文字列の場合、ASCII・ひらがな・カタカナ・漢字に関係なく、1文字2バイトになります。 この為、ASCII 文字が少なく、和文が多い文章では、ワイド文字列にした方がメモリ効率が良くなります。

ただし、Arduino IDE は、ワイド文字に対応した文字列操作関数を全くサポートしていませんので、単純に「カラー漢字 LCD シールド」に表示させる以上の事をさせようとすると、 プログラム作成時に大きな制約を受けてしまいます。
この問題ですが、「カラー漢字 LCD ライブラリ」には、ワイド文字列⇒通常の文字列に変換するサポート関数(convertWCharToChar)が有りますので、これで回避してください。

また、「通常の文字列」と「ワイド文字列」の区別とは別次元で、「SRAM 上の文字列」と「プログラムメモリ上の文字列」の2種類が存在します。 前者は SRAM 上に配置され、プログラムで自由に文字列の内容を変更できますが、後者は Arduino に書き込んだ後は変更できない(固定された)データとなります。 この為、組み合わせ的には、以下の4種類の文字列が存在します。

SRAM 上の文字列
(書き換え可能)
プログラムメモリ上の文字列
(書き換え不可能)
通常の文字列char str[ ] = "日本語";
※ SRAM を10バイト占有
PROGMEM prog_char pstr[ ] = "日本語";
※プログラムメモリを10バイト占有
ワイド文字列wchar_t wstr[ ] = L"日本語";
※ SRAM を8バイト占有
PROGMEM prog_wchar pwstr[ ] = L"日本語";
※プログラムメモリを8バイト占有

「カラー漢字 LCD ライブラリ」でも、これら4種類の文字列に対応するように、4種類の print 関数が存在しますので、適宜、使い分けが必要となります。

SRAM 上の文字列プログラムメモリ上の文字列
通常の文字列print (str)print_P (pstr)
ワイド文字列wprint (wstr)wprint_P (pwstr)

そんなに大量の文章を扱う訳で無い場合は、何も考えずに、SRAM 上の通常の文字列である char 配列を使っておけば、これらの問題は気にしなくても OK です。


・サポートしている機能

「カラー漢字 LCD ライブラリ」のサポートしている機能を、以下に列挙します。

<定数>
定義コメント
CKLCD_MAX_L_WIDTH 160ランドスケープモード時:最大グラフィック表示幅 (仮想画面サイズとは関係無く、物理的な画面サイズ) ※ CKLCD_MAX_P_HEIGHT に等しい
CKLCD_MAX_L_HEIGHT128ランドスケープモード時:最大グラフィック表示高さ (同上) ※ CKLCD_MAX_P_WIDTH に等しい
CKLCD_MAX_P_WIDTH 128ポートレートモード時:最大グラフィック表示幅 (同上) ※ CKLCD_MAX_L_HEIGHT に等しい
CKLCD_MAX_P_HEIGHT160ポートレートモード時:最大グラフィック表示高さ (同上) ※ CKLCD_MAX_L_WIDTH に等しい
CKLCD_MAX_ENCODING6サポートしている符号化方式の数
CKLCD_UTF16_BOML'\uFEFF'Byte Order Mark

<仮想画面>
カラー漢字 LCD シールドは、仮想画面1と仮想画面2の2面を持っており、flip 命令の時にアルファブレンド合成する事が可能です。
仮想画面1のサイズは160×256画素サイズ固定であり、この内の160×128画素のみを LCD に表示します(または表示させないモードも有り)。
一方、仮想画面2のサイズは160×128画素サイズ固定であり、常に全画素を LCD に表示します(または表示させないモードも有り)。
どちらの仮想画面も、LCD 表示開始座標を指定できます。リセット後、clear 命令後、または home 命令後、LCD 表示開始座標は (0,0) になります。
定義コメント
CKLCD_MAX_VPLANES2最大仮想画面数
CKLCD_VPLANE10仮想画面1:160×256画素サイズ固定
CKLCD_VPLANE21仮想画面2:160×128画素サイズ固定
CKLCD_VPLANE1_MAX_L_WIDTH160仮想画面1:ランドスケープモード時:最大幅
CKLCD_VPLANE1_MAX_L_HEIGHT256仮想画面1:ランドスケープモード時:最大高さ
CKLCD_VPLANE1_MAX_P_WIDTH256仮想画面1:ポートレートモード時:最大幅
CKLCD_VPLANE1_MAX_P_HEIGHT160仮想画面1:ポートレートモード時:最大高さ
CKLCD_VPLANE2_MAX_L_WIDTH160仮想画面2:ランドスケープモード時:最大幅
CKLCD_VPLANE2_MAX_L_HEIGHT128仮想画面2:ランドスケープモード時:最大高さ
CKLCD_VPLANE2_MAX_P_WIDTH128仮想画面2:ポートレートモード時:最大幅
CKLCD_VPLANE2_MAX_P_HEIGHT160仮想画面2:ポートレートモード時:最大高さ

<スクリーンモード>
以下の CKLCD_ORIENT_xxx のいずれかと、CKLCD_DISP_SCREEN_xxx のいずれかを OR して、指定します。

<スクリーンモード:スクリーンのオリエンテーション>
液晶画面の表示向きは2種類あり、横長状態をランドスケープ、縦長状態をポートレート、と呼称します。 2面ある仮想画面も同時に、縦と横の関係が入れ替わり、絶対座標(0,0)の位置も移動しますので、注意が必要です。
定義コメント
CKLCD_ORIENT_LANDSCAPE0x00ランドスケープモード:液晶画面を横長にした状態
CKLCD_ORIENT_PORTRAIT0x40ポートレート モード:液晶画面を縦長にした状態

<スクリーンモード:表示させる仮想画面>
Front面無しのモードは描画が高速です。一方、Front面有りのモードは常にアルファブレンド処理が行われるので、その分、描画が遅くなります。
なお、非表示中の仮想画面は、作業エリアとして使用する事が可能ですので、コピー元の画像とかを置いておくのに最適です。
定義コメント
CKLCD_DISP_SCREEN_NONEB000000Front面:無し、Back面:無し ※常に黒が表示されます。このモードの時は、仮想画面1と2は LCD に表示されないので作業エリアとして使用可能
CKLCD_DISP_SCREEN_B1B000100Front面:無し、Back面:仮想画面1(160×256) ※このモードの時は、仮想画面2は LCD に表示されないので作業エリアとして使用可能
CKLCD_DISP_SCREEN_B2B000101Front面:無し、Back面:仮想画面2(160×128) ※このモードの時は、仮想画面1は LCD に表示されないので作業エリアとして使用可能
CKLCD_DISP_SCREEN_F1B100000Front面:仮想画面1(160×256)、Back面:無し ※このモードの時は、仮想画面2は LCD に表示されないので作業エリアとして使用可能
CKLCD_DISP_SCREEN_F2B101000Front面:仮想画面2(160×128)、Back面:無し ※このモードの時は、仮想画面1は LCD に表示されないので作業エリアとして使用可能
CKLCD_DISP_SCREEN_F1_B2B100101Front面:仮想画面1(160×256)、Back面:仮想画面2(160×128) ※ LCD に表示時にアルファブレンド処理されます
CKLCD_DISP_SCREEN_F2_B1B101100Front面:仮想画面2(160×128)、Back面:仮想画面1(160×256) ※ LCD に表示時にアルファブレンド処理されます

<フリップモード>
print/write 系関数を呼び出した時、仮想画面上に描画された文字を、自動的に液晶画面に flip させるか・させないか、の設定です。
描画途中の仮想画面を表示させず、描画完了してから一気に表示させたい場合は MANU モードにしてください。
なお、AUTO モードでも、自動的に flip するのは print/write 系関数と clear 関数のみで、それ以外の描画関数は自動的に flip しませんので注意して下さい。
定義コメント
CKLCD_FLIP_MODE_AUTO0x00自動的に flip します。デフォルト設定です。
CKLCD_FLIP_MODE_MANU0x20自動的に flip しません。ユーザーが明示的に flip() を呼ぶ必要があります。


<カラー漢字 LCD シールドで指定できる色>
カラー漢字 LCD シールドでは、16bit長の絶対色が2種類、32bit長の論理色が1種類、の計3つあります。
通常は、32bit長の論理色を使用します。カラー漢字LCD 内で自動的に、どちらかの 16bit長の絶対色に変換されます。
ユーザーが直接、16bit長の絶対色を操作する事は少ないですが、その挙動は知っておく必要があります。
名称16bit長32bit長コメント
絶対色(ARGB4444)AAAARRRRGGGGBBBBAAAA---- RRRR---- GGGG---- BBBB----※ ARGB4444 は 16bit長のフォーマットの通りですが、32bit長に置き換えると、このような"重み付け"になります
絶対色 (RGB565) RRRRRGGGGGGBBBBB-------- RRRRR--- GGGGGG-- BBBBB---※ RGB565 は 16bit長のフォーマットの通りですが、32bit長に置き換えると、このような"重み付け"になります
論理色(ARGB8888)-----無 し-----AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB※ ARGB4444 と RGB565 を包括した 32bit長のみのフォーマットです。16bit長は有りません。

<絶対色:16bit長>
Front面に選ばれた仮想画面は、絶対色 ARGB4444 で描画する必要があります。アルファ成分が有る為、代償として R/G/B の各ビット幅が少なくなっています。 この為、擬似輪郭が発生しやすいです。
定義コメント
CKLCD_FRONT_VP_ALPHA_MASK0xF000Front面のα成分:4bit長
CKLCD_FRONT_VP_RED_MASK0x0F00Front面の赤成分:4bit長
CKLCD_FRONT_VP_GREEN_MASK0x00F0Front面の緑成分:4bit長
CKLCD_FRONT_VP_BLUE_MASK0x000FFront面の青成分:4bit長
Back面に選ばれた仮想画面は、絶対色 RGB565 で描画する必要があります。アルファ成分は有りません。その代わり、R/G/B の各ビット幅が多くなっています。
定義コメント
CKLCD_BACK_VP_RED_MASK0xF800Back面の赤成分:5bit長
CKLCD_BACK_VP_GREEN_MASK0x07E0Back面の緑成分:6bit長
CKLCD_BACK_VP_BLUE_MASK0x001FBack面の青成分:5bit長
※ 実際は、後述の論理色 ARGB8888 を使用しますので、この絶対色 ARGB4444, RGB565 を直接使用する事は、そんなにありません。

<論理色:32bit長>
通常は、この論理色(ARGB8888)を使用します。この論理色は ARGB4444 と RGB565 の2つを包括した論理的な色であり、 実際に描画する時には、指定した仮想画面が Front面の時は ARGB4444 に、Back面の時は RGB565 に自動的に変換されます。
定義コメント
CKLCD_COL32_ALPHA_MASK0xFF000000論理色のα成分:8bit長 ※ 絶対色に変換された時は、先頭の 4bit のみ有効
CKLCD_COL32_RED_MASK0x00FF0000論理色の赤成分:8bit長 ※ 絶対色に変換された時は、先頭の 5bit 乃至 4bit のみ有効
CKLCD_COL32_GREEN_MASK0x0000FF00論理色の緑成分:8bit長 ※ 絶対色に変換された時は、先頭の 6bit 乃至 4bit のみ有効
CKLCD_COL32_BLUE_MASK0x000000FF論理色の青成分:8bit長 ※ 絶対色に変換された時は、先頭の 5bit 乃至 4bit のみ有効
CKLCD_COL32_TRANS0x00000000透明の論理色
※ アルファ値==0 の透明色です。仮想画面が透過モードの時は、このままだと全く LCD に表示されないので、アルファ値(1〜255)を加算する必要があります。
CKLCD_COL32_TRANS_RED0x00FF0000
CKLCD_COL32_TRANS_GREEN0x0000FF00
CKLCD_COL32_TRANS_YELLOW0x00FFFF00
CKLCD_COL32_TRANS_BLUE0x000000FF
CKLCD_COL32_TRANS_MAGENTA0x00FF00FF
CKLCD_COL32_TRANS_CYAN0x0000FFFF
CKLCD_COL32_TRANS_WHITE0x00FFFFFF
CKLCD_COL32_TRANS_DARK_RED0x00800000
CKLCD_COL32_TRANS_DARK_GREEN0x00008000
CKLCD_COL32_TRANS_DARK_YELLOW0x00808000
CKLCD_COL32_TRANS_DARK_BLUE0x00000080
CKLCD_COL32_TRANS_DARK_MAGENTA0x00800080
CKLCD_COL32_TRANS_DARK_CYAN0x00008080
CKLCD_COL32_TRANS_GRAY0x00808080
CKLCD_COL32_BLACK0xFF000000不透明の論理色
CKLCD_COL32_RED0xFFFF0000
CKLCD_COL32_GREEN0xFF00FF00
CKLCD_COL32_YELLOW0xFFFFFF00
CKLCD_COL32_BLUE0xFF0000FF
CKLCD_COL32_MAGENTA0xFFFF00FF
CKLCD_COL32_CYAN0xFF00FFFF
CKLCD_COL32_WHITE0xFFFFFFFF
CKLCD_COL32_DARK_RED0xFF800000
CKLCD_COL32_DARK_GREEN0xFF008000
CKLCD_COL32_DARK_YELLOW0xFF808000
CKLCD_COL32_DARK_BLUE0xFF000080
CKLCD_COL32_DARK_MAGENTA0xFF800080
CKLCD_COL32_DARK_CYAN0xFF008080
CKLCD_COL32_GRAY0xFF808080

<仮想画面の状態設定>
定義コメント
CKLCD_VP_COND_OPAQUE0x00非透過モード: Back (背景)面は基本的にこの設定になりますが、flip 時に注意する事を条件に setCondition 関数で透過モードに変更する事も可能です。
CKLCD_VP_COND_TRANS0x04透過モード : Front(前景)面は基本的にこの設定になりますが、flip 時に注意する事を条件に setCondition 関数で非透過モードに変更する事も可能です。

<setBlendMode 関数で指定できる処理>
定義コメント
CKLCD_BLEND_OVER0x00ブレンドせず、上書きします。処理速度は速いです。
CKLCD_BLEND_ADD0x08アルファ値を元に、ブレンド処理します。論理アルファ値==1.0 の時は上書きした時と同じ結果になります。各画素毎に計算するので、処理速度は遅いです。

<描画関係コマンド(pset/line/rect/circle)時のオプション>
定義コメント
CKLCD_DRAW_COLOR0x00setDrawColor 関数の論理色で描画する
CKLCD_BACK_COLOR0x10setBackColor 関数の論理色で描画する
CKLCD_DRAW_NO_FILL0x00領域内を塗りつぶさない
CKLCD_DRAW_FILL0x20領域内を塗りつぶす: rect, circle 関数でのみ有効

<LoadImg 関数系のオプション>
定義コメント
CKLCD_LOAD_IMG_TWI_BUFF_SIZE_310x0031byte長TWI 通信時の画像データ転送時の MAX バッファサイズ
※ ただし Arduino の Wire ライブラリのバッファは、コマンドbyte 含めて 32byte までしかなので、31byte のみ指定可能。それ以外を指定すると必ず CKLCD_ERR_TWI_BUFF_FULL エラーになってしまいます
CKLCD_LOAD_IMG_TWI_BUFF_SIZE_630x1063byte長
CKLCD_LOAD_IMG_TWI_BUFF_SIZE_950x2095byte長
CKLCD_LOAD_IMG_TWI_BUFF_SIZE_1270x30127byte長
CKLCD_LOAD_IMG_DISP_ERR_MSG0x80エラー発生時に (xPos,yPos) の位置に簡易メッセージを表示

<仮想画面のクリア・フラグ>
定義コメント
CKLCD_CLR_FLG_FLIP0x01フリップモードが AUTO モードの時、現在の LCD 表示開始座標に従って、全表示領域を flip させます
CKLCD_CLR_FLG_DISP_START_HOME0x02LCD 表示開始位置を (0,0) にする
CKLCD_CLR_FLG_CURSOR_HOME0x04カーソル位置を (0,0) にする

<フォントのオプション>
全て、M+フォント+IPAフォントです。
モノスペース (固定幅)全角文字は同じ幅になるので setCursor関数で指定しやすくなります。
その代わり、文字の間隔があいてしまうので、欧文などの表示が美しくありません。
プロポーショナル(可変幅)漢字以外の文字が可変幅になり、読みやすくなります。
その代わり、setCursor 関数で指定しづらくなってしまいます。setCursorMin 関数を使用するようにして下さい。

<フォントのタイプ>
定義コメント
CKLCD_FONT_TYPE_RUBY_MS0x00モノスペース  (固定幅):8画素固定ルビ用フォント:幅は最大8画素で、高さは10画素です。ただし、ASCII、ISO8859-1、ひらがなとカタカナ、一部の記号のみです。
CKLCD_FONT_TYPE_RUBY_P0x01プロポーショナル(可変幅):最大8画素
CKLCD_FONT_TYPE_12px_MS0x02モノスペース  (固定幅):12画素固定12pxフォント:幅は最大12画素で、高さは15画素です。ただし、ASCII、ISO8859-1、ひらがなとカタカナ、一部の記号のみです。
CKLCD_FONT_TYPE_12px_P0x03プロポーショナル(可変幅):最大12画素
CKLCD_FONT_TYPE_MONOSPACED0x04モノスペース  (固定幅):16画素固定標準フォント:幅は最大16画素で、高さは20画素です。JIS 第一水準〜第三水準の全ての文字をサポートしています。
CKLCD_FONT_TYPE_PROPORTIONAL0x05プロポーショナル(可変幅):最大16画素
CKLCD_FONT_TYPE_20px_MS0x06モノスペース  (固定幅):20画素固定20pxフォント:幅は最大20画素で、高さは25画素です。ただし、ASCII、ISO8859-1、極一部の記号のみです。
CKLCD_FONT_TYPE_20px_P0x07プロポーショナル(可変幅):最大20画素
CKLCD_FONT_TYPE_24px_MS0x08モノスペース  (固定幅):24画素固定24pxフォント:幅は最大24画素で、高さは30画素です。ただし、ASCII、ISO8859-1、極一部の記号のみです。
CKLCD_FONT_TYPE_24px_P0x09プロポーショナル(可変幅):最大24画素
CKLCD_FONT_TYPE_28px_MS0x0Aモノスペース  (固定幅):28画素固定28pxフォント:幅は最大28画素で、高さは35画素です。ただし、ASCII、ISO8859-1、極一部の記号のみです。
CKLCD_FONT_TYPE_28px_P0x0Bプロポーショナル(可変幅):最大28画素

<フォントの属性>
定義コメント
CKLCD_FONT_ATTR_UNDERLINE0x10アンダーラインを表示
CKLCD_FONT_ATTR_STRIKE0x20取消し線を表示
CKLCD_FONT_ATTR_INVERTED0x40文字色を反転

<現在のフォント情報>
この値を直接指定するのではなく、ColorKanjiLCDVPlane クラスの getFontType(), getFontWidth(), getFontHeight() を使用して下さい。
定義コメント
CKLCD_CURR_FONT_INFO_TYPE0フォントのタイプ番号:CKLCD_FONT_TYPE_xxx のいずれか
CKLCD_CURR_FONT_INFO_WIDTH1フォントの最大幅
CKLCD_CURR_FONT_INFO_HEIGHT2フォントの高さ

<符号化方式>
定義コメント
CKLCD_ENC_UTF80UTF-8 方式 : default
CKLCD_ENC_UTF161UTF-16 方式 (BOM 自動判別) ※最初に KLCD_UTF16_BOM を送信する必要あり
CKLCD_ENC_UTF16BE2UTF-16 方式 (Big Endian 固定)
CKLCD_ENC_UTF16LE3UTF-16 方式 (Little Endian 固定)
CKLCD_ENC_SJIS4シフトJIS 方式
CKLCD_ENC_EUC_JP5EUC-JP 方式

<エラーコード> ※1〜4 は Wire ライブラリのエラーコードです
定義コメント
CKLCD_ERR_NONE0正常
CKLCD_ERR_TWI_BUFF_FULL1Wire ライブラリの送信バッファが一杯
CKLCD_ERR_TWI_ADDR_NACK2TWI アドレス送信で NACK が返ってきた
CKLCD_ERR_TWI_DATA_NACK3TWI データ送信で NACK が返ってきた
CKLCD_ERR_TWI_OTHER_ERR4Wire ライブラリのその他のエラー
CKLCD_ERR_LOAD_IMG_END0x80LoadImg の callback 終了
CKLCD_ERR_IMG_LOADING0x81画像読み込み中:実際はエラーではなく、単なる通知情報
CKLCD_ERR_IMG_LOADING_FRAME_END0x82画像読み込み中(フレームの終端):実際はエラーではなく、単なる通知情報
CKLCD_ERR_IMG_NO_JPG0xA0JPG: JFIFフォーマットでないJPGデータ
CKLCD_ERR_JPG_TOO_BIG0xA1JPG: 1024×1024 画素以上の寸法。メモリ容量の関係で、この寸法以下しか読み込めません。
CKLCD_ERR_JPG_INSUF_MEM0xA2JPG: 処理するためのメモリが足らない(通常発生しないはず)
CKLCD_ERR_JPG_DATA_ERR0xA3JPG: 異常なJFIFフォーマット(壊れている?)
CKLCD_ERR_JPG_INSUF_DATA0xA4JPG: 画像の大きさに必要な画像データに達する前にデータ終了を検知した:多分、中途半端な画像で途切れているハズ
CKLCD_ERR_JPG_UNSUP_FMT0xA5JPG: JFIFフォーマットとしては正しいが、本機ではサポートしていない
CKLCD_ERR_JPG_UNSUP_PRGRS0xA6JPG: Progressive JPG は、未サポート
CKLCD_ERR_IMG_NO_PNG0xB0PNG: PNGフォーマットでないPNGデータ
CKLCD_ERR_PNG_TOO_BIG0xB1PNG: 256×1024 画素以上の寸法。メモリ容量の関係で、この寸法以下しか読み込めません。
CKLCD_ERR_PNG_INSUF_MEM0xB2PNG: 処理するためのメモリが足らない(通常発生しないはず)
CKLCD_ERR_PNG_DATA_ERR0xB3PNG: 異常なPNGフォーマット(壊れている?)
CKLCD_ERR_PNG_INSUF_DATA0xB4PNG: 画像の大きさに必要な画像データに達する前にデータ終了を検知した:多分、中途半端な画像で途切れているハズ
CKLCD_ERR_PNG_CHUNK_ERR0xB5PNG: 異常なPNGフォーマット(壊れている?):チャンクエラー:異常なチャンクや、チャンクの順番がおかしい
CKLCD_ERR_PNG_CRC_ERR0xB6PNG: 異常なPNGフォーマット(壊れている?):CRCエラー
CKLCD_ERR_PNG_IHDR_ERR0xB7PNG: 異常なPNGフォーマット(壊れている?):IHDR異常
CKLCD_ERR_PNG_UNSUP_DEPTH0xB8PNG: 対応していない色深度。対応しているのは 1/2/4/8 bit深度のみです。16 bit深度の png には非対応です。
CKLCD_ERR_PNG_UNSUP_INTERLACE0xB9PNG: interlace PNG には対応していない
CKLCD_ERR_PNG_INV_CHAN0xBAPNG: チャンネル数が3でも4でもない:グレースケール画像からカラー画像への変換(といってもRGB同じ値にしてるだけ)に失敗した時に発生する
CKLCD_ERR_PNG_ZLIB_ERR0xBBPNG: 異常なPNGフォーマット(壊れている?):zlibでエラー
CKLCD_ERR_PNG_IMG_ERR0xBCPNG: 異常なPNGフォーマット(壊れている?):画像部(IDAT)が異常
CKLCD_ERR_PNG_UNKNOWN0xBFPNG: 上記の分類に当てはまらないエラー
CKLCD_ERR_IMG_NO_GIF0xC0GIF: GIF87/89フォーマットでないGIFデータ
CKLCD_ERR_GIF_TOO_BIG0xC1GIF: 640×1024 画素以上の寸法。メモリ容量の関係で、この寸法以下しか読み込めません。
CKLCD_ERR_GIF_INSUF_MEM0xC2GIF: 処理するためのメモリが足らない(通常発生しないはず)
CKLCD_ERR_GIF_DATA_ERR0xC3GIF: 異常なGIF87/89フォーマット(壊れている?)
CKLCD_ERR_GIF_INSUF_DATA0xC4GIF: 画像の大きさに必要な画像データに達する前にデータ終了を検知した:多分、中途半端な画像で途切れているハズ
CKLCD_ERR_GIF_NO_COL_TBL0xC5GIF: カラーテーブルが無い:異常なGIF87/89フォーマット
CKLCD_ERR_IMG_NO_BMP0xD0BMP: 'BM'から開始していないBMPデータ
CKLCD_ERR_BMP_TOO_BIG0xD1BMP: 640×1024 画素以上の寸法。メモリ容量の関係で、この寸法以下しか読み込めません。
CKLCD_ERR_BMP_INSUF_MEM0xD2BMP: 処理するためのメモリが足らない(通常発生しないはず)
CKLCD_ERR_BMP_DATA_ERR0xD3BMP: 異常なBMPフォーマット(壊れている?)
CKLCD_ERR_BMP_INSUF_DATA0xD4BMP: 画像の大きさに必要な画像データに達する前にデータ終了を検知した:多分、中途半端な画像で途切れているハズ
CKLCD_ERR_BMP_UNSUP_HEAD0xD5BMP: 対応していないヘッダー。対応しているのは BITMAPINFOHEADER, BITMAPV4HEADER, BITMAPV5HEADER のみです。BITMAPCOREHEADER には非対応です。
CKLCD_ERR_BMP_UNSUP_PLANES0xD6BMP: 対応していないプレーン数。対応しているのは 1 のみです。
CKLCD_ERR_BMP_UNSUP_COMP0xD7BMP: 対応していない圧縮タイプ。対応しているのは BI_RGB, BI_BITFIELDS, BI_ALPHABITFIELDS のみです。RLE圧縮(BI_RLE4/BI_RLE8)には非対応です。
CKLCD_ERR_BMP_UNSUP_BITCNT0xD8BMP: 対応していないBitCount。対応しているのは 1/2/4/8/16/24/32 bpp のみです。
CKLCD_ERR_BUSY0xF0カラー漢字 LCD シールドが Busy なので、要求を処理できない
CKLCD_ERR_TIME_OUT0xF1カラー漢字 LCD シールドとの通信がタイムアウトした
CKLCD_ERR_ABORTED0xF2ユーザーによって中断された
CKLCD_ERR_INVALID_STATE0xF7不正なステート:例えば、loadXxx() 中で無いのに、CKLCD_CMD_LOAD_IMG_XLAT/CANCEL コマンドを発行した場合
CKLCD_ERR_CONFLICT0xF8衝突していて解決できない:例えば、copyWithRotate() でコピー元とコピー先が部分的に重なっている場合
CKLCD_ERR_SAME0xF9同じものを指定した:例えば、copy() でコピー元とコピー先が同一の時
CKLCD_ERR_OUT_OF_RANGE0xFA指定できる範囲から逸脱している
CKLCD_ERR_INVALID_PARAM0xFB引数が不正
CKLCD_ERR_UNK_CMD0xFCBS21LAB-006 でサポートしていないコマンド
CKLCD_ERR_NOT_INIT0xFD初期化されていない
CKLCD_ERR_UNDEFINED0xFE未定義エラー
CKLCD_ERR_UNKNOWN0xFF原因不明のエラーが発生した

<typedef 定義>
定義コメント
errCode_tuint8_tエラーコード。CKLCD_ERR_xxx のいずれか。
※ただの uint8_t と記述するよりも errCode_t と記述した方が、意味が明確になるから。
prog_charchar PROGMEMプログラムメモリ上の文字 ※実際は avr/pgmspace.h で定義されています
prog_wcharwchar_t PROGMEMプログラムメモリ上のワイド文字 ※avr/pgmspace.h で定義されている prog_char のワイド文字版
cklcdCol16_tuint16_t絶対色:16bit長
cklcdCol32_tuint32_t論理色:32bit長
cklcdInvRatio10_tuint16_t逆倍率: 16bit長固定小数点値(Q6.10)
cklcdBAM10_tuint16_t"BAM10"単位: 16bit長だが実際は下位10bitのみ有効。上位6bitは無視される
cklcdLoadImgCallback_terrCode_t (*) (uint8_t * buff, uint8_t buff_size, ColorKanjiLCDLoadImgSize * user_def_data)loadBmp, loadJpg, loadPng, loadGif 関数から呼び出されるユーザー定義 callback 関数
cklcdImgFrameCallback_terrCode_t (*) (ColorKanjiLCDLoadImgSize * user_def_data)loadGif 関数から呼び出されるユーザー定義 callback 関数

<#define 定義>
定義名定義内容コメント
PSTR(s)(__extension__({static const char __c[ ] PROGMEM = (s); &__c[0];}))プログラムメモリ上の文字列 ※実際は avr/pgmspace.h で定義されています。
C++ の標準仕様ではなく Arduino IDE の拡張機能
klcd.print(PSTR("文字列")); という風に使用します
PWSTR(s)(__extension__({static const wchar_t __c[ ] PROGMEM = (s); &__c[0];}))プログラムメモリ上のワイド文字列 ※avr/pgmspace.h の PSTR 定義のワイド文字版
C++ の標準仕様ではなく Arduino IDE の拡張機能
klcd.wprint(PWSTR(L"文字列")); という風に使用します
CKLCD_COL32_MAKE_ALPHA(a)((cklcdCol32_t)((a) & 0xFF) << 24)
CKLCD_COL32_MAKE_RED(r)((cklcdCol32_t)((r) & 0xFF) << 16)
CKLCD_COL32_MAKE_GREEN(g)((cklcdCol32_t)((g) & 0xFF) << 8)
CKLCD_COL32_MAKE_BLUE(b)((cklcdCol32_t)((b) & 0xFF) << 0)
CKLCD_COL32_SPLIT_ALPHA(col32)((uint8_t)((col32) >> 24))
CKLCD_COL32_SPLIT_RED(col32)((uint8_t)((col32) >> 16))
CKLCD_COL32_SPLIT_GREEN(col32)((uint8_t)((col32) >> 8))
CKLCD_COL32_SPLIT_BLUE(col32)((uint8_t)((col32) >> 0))




!!!途中です。!!!


<グローバル関数>
文字コード変換サービス関数
Arduino IDE には、ワイド文字(UTF-16)に対応した文字列操作関数が存在しないので、これらのサービス関数にて、ワイド文字列から通常の文字列(UTF-8)に変換してから、文字列操作すると良いでしょう。
buffer は、変換後の UTF-8 文字列を格納するのに十分なサイズである必要があります。だいたい UTF-16 文字列の総バイト数の1.5倍+αが目安です。
注意:バッファあふれのチェックはしていませんので、注意してください。
関数名戻り値パラメータコメント
convertWCharToCharsize_tchar * buffer,
const wchar_t * wstr
SRAM 上の UTF-16 文字列 wstr を、UTF-8 文字列 buffer に変換します。変換後のバイト数を返します。
convertWCharToChar_Psize_tchar * buffer,
const prog_wchar * pwstr
プログラムメモリ上の UTF-16 文字列 pwstr を、UTF-8 文字列 buffer に変換します。変換後のバイト数を返します。


カラー漢字 LCD シールドに戻る

Copyright (C) 2013-2014 BS21 Lab, All rights reserved.