Drawing test for Japanese UTF-8 string literal using GT20L16J1Y font ROM.

Dependencies:   C12832 GT20L16J1Y_font mbed

Fork of hello_GT20L16J1Y_FONT by Toyomasa Watarai

/media/uploads/MACRUM/10441061_10202364303981428_7731757494769382505_n.jpg

Committer:
MACRUM
Date:
Mon Aug 04 02:15:06 2014 +0000
Revision:
3:722665b5efc7
Parent:
0:b468ef973095
Initial release

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MACRUM 0:b468ef973095 1 #include "mbed.h"
MACRUM 3:722665b5efc7 2 #include "C12832.h"
MACRUM 0:b468ef973095 3 #include "GT20L16J1Y_font.h"
MACRUM 0:b468ef973095 4
MACRUM 3:722665b5efc7 5 #include <locale.h>
MACRUM 3:722665b5efc7 6 #include <cwchar>
MACRUM 3:722665b5efc7 7
MACRUM 3:722665b5efc7 8 #pragma import __use_all_ctype
MACRUM 3:722665b5efc7 9
MACRUM 3:722665b5efc7 10 char buf_s[80];
MACRUM 3:722665b5efc7 11 wchar_t wstr[80];
MACRUM 3:722665b5efc7 12
MACRUM 0:b468ef973095 13 /*
MACRUM 0:b468ef973095 14 GT20L16J1Y library test program
MACRUM 0:b468ef973095 15 works with mbed application board
MACRUM 0:b468ef973095 16 */
MACRUM 0:b468ef973095 17
MACRUM 3:722665b5efc7 18 C12832 lcd(p5, p7, p6, p8, p11);
MACRUM 0:b468ef973095 19 GT20L16J1Y_FONT font(p11, p12, p13, p10);
MACRUM 0:b468ef973095 20
MACRUM 0:b468ef973095 21 void draw_kanji(int offset_x, int offset_y)
MACRUM 0:b468ef973095 22 {
MACRUM 0:b468ef973095 23 int color;
MACRUM 0:b468ef973095 24 for(int x=0; x<32; x++)
MACRUM 0:b468ef973095 25 {
MACRUM 0:b468ef973095 26 for(int y=0; y<8; y++)
MACRUM 0:b468ef973095 27 {
MACRUM 0:b468ef973095 28 if (font.bitmap[x] & (1<<y))
MACRUM 0:b468ef973095 29 color = 1;
MACRUM 0:b468ef973095 30 else
MACRUM 0:b468ef973095 31 color = 0;
MACRUM 0:b468ef973095 32 lcd.pixel(x%16 + offset_x, y+(8*(x>>4)) + offset_y, color);
MACRUM 0:b468ef973095 33 }
MACRUM 0:b468ef973095 34 }
MACRUM 0:b468ef973095 35 lcd.copy_to_lcd();
MACRUM 0:b468ef973095 36 }
MACRUM 0:b468ef973095 37
MACRUM 3:722665b5efc7 38 static int utf8tosjis(const char* utfBuffer, int utfBufLen, char* sjisBuffer, int sjisBufLen)
MACRUM 3:722665b5efc7 39 {
MACRUM 3:722665b5efc7 40 int i, wi;
MACRUM 3:722665b5efc7 41 wchar_t wc;
MACRUM 3:722665b5efc7 42 mbstate_t state = {0};
MACRUM 3:722665b5efc7 43 size_t ret;
MACRUM 3:722665b5efc7 44 char * current_locale;
MACRUM 3:722665b5efc7 45 i = wi = 0;
MACRUM 3:722665b5efc7 46
MACRUM 3:722665b5efc7 47 current_locale = setlocale(LC_CTYPE, "UTF-8");
MACRUM 3:722665b5efc7 48 if (current_locale == NULL)
MACRUM 3:722665b5efc7 49 return 0;
MACRUM 3:722665b5efc7 50
MACRUM 3:722665b5efc7 51 while (1) {
MACRUM 3:722665b5efc7 52 ret = mbrtowc(&wc, utfBuffer+i, 3, &state);
MACRUM 3:722665b5efc7 53 if (ret == (size_t)-2 || ret == (size_t)-1) {
MACRUM 3:722665b5efc7 54 //printf("\nThere was a problem decoding the multibyte string.\n");
MACRUM 3:722665b5efc7 55 return ret;
MACRUM 3:722665b5efc7 56 } else if (ret == 0) {
MACRUM 3:722665b5efc7 57 break; /* we hit \0, end of string */
MACRUM 3:722665b5efc7 58 } else {
MACRUM 3:722665b5efc7 59 i += ret;
MACRUM 3:722665b5efc7 60 wstr[wi++] = wc;
MACRUM 3:722665b5efc7 61 }
MACRUM 3:722665b5efc7 62 }
MACRUM 3:722665b5efc7 63 wstr[wi] = L'\0';
MACRUM 3:722665b5efc7 64
MACRUM 3:722665b5efc7 65 current_locale = setlocale(LC_CTYPE, "SJIS");
MACRUM 3:722665b5efc7 66 if (current_locale == NULL)
MACRUM 3:722665b5efc7 67 return 0;
MACRUM 3:722665b5efc7 68
MACRUM 3:722665b5efc7 69 ret = wcstombs(sjisBuffer, wstr, sjisBufLen);
MACRUM 3:722665b5efc7 70
MACRUM 3:722665b5efc7 71 return ret;
MACRUM 3:722665b5efc7 72 }
MACRUM 3:722665b5efc7 73
MACRUM 3:722665b5efc7 74 void draw_utf8(int offset_x, int offset_y, char *buf_u)
MACRUM 3:722665b5efc7 75 {
MACRUM 3:722665b5efc7 76 size_t sz;
MACRUM 3:722665b5efc7 77
MACRUM 3:722665b5efc7 78 // assuming UTF-8 is NULL terminated
MACRUM 3:722665b5efc7 79 sz = strlen(buf_u);
MACRUM 3:722665b5efc7 80 int len = utf8tosjis(buf_u, sz, buf_s, sizeof(buf_s));
MACRUM 3:722665b5efc7 81
MACRUM 3:722665b5efc7 82 for(int i = 0; i < len; i += 2) {
MACRUM 3:722665b5efc7 83 font.read((buf_s[i] << 8) | buf_s[i+1]);
MACRUM 3:722665b5efc7 84 draw_kanji(i*8, 0);
MACRUM 3:722665b5efc7 85 }
MACRUM 3:722665b5efc7 86 }
MACRUM 3:722665b5efc7 87
MACRUM 3:722665b5efc7 88
MACRUM 0:b468ef973095 89 int main()
MACRUM 0:b468ef973095 90 {
MACRUM 0:b468ef973095 91 lcd.cls();
MACRUM 0:b468ef973095 92
MACRUM 3:722665b5efc7 93 draw_utf8(0, 0, "進捗どうですか?");
MACRUM 3:722665b5efc7 94 printf("進捗ありません。\n");
MACRUM 3:722665b5efc7 95
MACRUM 3:722665b5efc7 96 while(1);
MACRUM 0:b468ef973095 97 }