Drawing test for Japanese UTF-8 string literal using GT20L16J1Y font ROM.
Dependencies: C12832 GT20L16J1Y_font mbed
Fork of hello_GT20L16J1Y_FONT by
main.cpp@3:722665b5efc7, 2014-08-04 (annotated)
- 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?
User | Revision | Line number | New 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 | } |